diff options
author | Andrew Burgess <andrew.burgess@embecosm.com> | 2018-05-23 17:06:02 +0100 |
---|---|---|
committer | Andrew Burgess <andrew.burgess@embecosm.com> | 2018-06-12 21:15:33 +0100 |
commit | 1840d81a201932a2d5ad5b089aad85943a5a0a82 (patch) | |
tree | 6ca4da94d4907f27d462b52ad5ae42e46e4696e2 | |
parent | 9516f85aea1d9a34d1cd3f59b7b9eeb590e58c70 (diff) | |
download | gdb-1840d81a201932a2d5ad5b089aad85943a5a0a82.zip gdb-1840d81a201932a2d5ad5b089aad85943a5a0a82.tar.gz gdb-1840d81a201932a2d5ad5b089aad85943a5a0a82.tar.bz2 |
gdb: Run INF_EXEC_COMPLETE handler for additional cases
When making an inferior call, and non-stop mode is off, then, once the
inferior call is complete all threads will be stopped, and we should
run the INF_EXEC_COMPLETE handler. This will result in a call to
'target_async(0)' to remove the event handlers for the target.
This was discussed by Yao Qi in this mailing list thread:
https://sourceware.org/ml/gdb/2017-10/msg00032.html
Without this then the target event handlers are left in place even
when the target is stopped, which is different to what happens during
a standard stop proceedure (for example when one thread hits a
breakpoint).
gdb/ChangeLog:
PR gdb/22882
* infrun.c (fetch_inferior_event): If GDB is not proceeding then
run INF_EXEC_COMPLETE handler, even when not calling normal_stop.
Move should_notify_stop local into more inner scope.
-rw-r--r-- | gdb/ChangeLog | 8 | ||||
-rw-r--r-- | gdb/infrun.c | 16 |
2 files changed, 16 insertions, 8 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 692bb5a..edb60f7 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -2,6 +2,14 @@ Stephen Roberts <stephen.roberts@arm.com> PR gdb/22882 + * infrun.c (fetch_inferior_event): If GDB is not proceeding then + run INF_EXEC_COMPLETE handler, even when not calling normal_stop. + Move should_notify_stop local into more inner scope. + +2018-06-12 Andrew Burgess <andrew.burgess@embecosm.com> + Stephen Roberts <stephen.roberts@arm.com> + + PR gdb/22882 * infrun.c (resume_1): Add call to mark_async_event_handler. 2018-06-12 Andrew Burgess <andrew.burgess@embecosm.com> diff --git a/gdb/infrun.c b/gdb/infrun.c index 6f5338c..f455af2 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -3932,7 +3932,6 @@ fetch_inferior_event (void *client_data) struct inferior *inf = find_inferior_ptid (ecs->ptid); int should_stop = 1; struct thread_info *thr = ecs->event_thread; - int should_notify_stop = 1; delete_just_stopped_threads_infrun_breakpoints (); @@ -3950,6 +3949,9 @@ fetch_inferior_event (void *client_data) } else { + int should_notify_stop = 1; + int proceeded = 0; + clean_up_just_stopped_threads_fsms (ecs); if (thr != NULL && thr->thread_fsm != NULL) @@ -3960,17 +3962,15 @@ fetch_inferior_event (void *client_data) if (should_notify_stop) { - int proceeded = 0; - /* We may not find an inferior if this was a process exit. */ if (inf == NULL || inf->control.stop_soon == NO_STOP_QUIETLY) proceeded = normal_stop (); + } - if (!proceeded) - { - inferior_event_handler (INF_EXEC_COMPLETE, NULL); - cmd_done = 1; - } + if (!proceeded) + { + inferior_event_handler (INF_EXEC_COMPLETE, NULL); + cmd_done = 1; } } } |