diff options
author | John Baldwin <jhb@FreeBSD.org> | 2022-02-22 11:22:14 -0800 |
---|---|---|
committer | John Baldwin <jhb@FreeBSD.org> | 2022-02-22 11:22:14 -0800 |
commit | 34c9b2b49be0bb0ea3efdc193fc0a8f615775f09 (patch) | |
tree | d0a40b9e917242d4e1de24a08622c4acd89ae547 /gdb/remote.c | |
parent | 38ba82db783e7dde2e73212be71c92872d875e4d (diff) | |
download | fsf-binutils-gdb-34c9b2b49be0bb0ea3efdc193fc0a8f615775f09.zip fsf-binutils-gdb-34c9b2b49be0bb0ea3efdc193fc0a8f615775f09.tar.gz fsf-binutils-gdb-34c9b2b49be0bb0ea3efdc193fc0a8f615775f09.tar.bz2 |
Don't enable async mode at the end of target ::resume methods.
Now that target_resume always enables async mode after target::resume
returns, these calls are redundant.
The other place that target resume methods are invoked outside of
target_resume are as the beneath target in record_full_wait_1. In
this case, async mode should already be enabled when supported by the
target before the resume method is invoked due to the following:
In general, targets which support async mode run as async until
::wait returns TARGET_WAITKIND_NO_RESUMED to indicate that there are
no unwaited for children (either they have exited or are stopped).
When that occurs, the loop in wait_one disables async mode. Later
if a stopped child is resumed, async mode is re-enabled in
do_target_resume before waiting for the next event.
In the case of record_full_wait_1, this function is invoked from the
::wait target method when fetching an event. If the underlying
target supports async mode, then an earlier call to do_target_resume
to resume the child reporting an event in the loop in
record_full_wait_1 would have already enabled async mode before
::wait was invoked. In addition, nothing in the code executed in
the loop in record_full_wait_1 disables async mode. Async mode is
only disabled higher in the call stack in wait_one after ::wait
returns.
It is also true that async mode can be disabled by an
INF_EXEC_COMPLETE event passed to inferior_event_handle, but all of
the places that invoke that are in the gdb core which is "above" a
target ::wait method.
Note that there is an earlier call to enable async mode in
linux_nat_target::resume. That call also marks the async event pipe
to report an existing event after enabling async mode, so it needs to
stay.
Diffstat (limited to 'gdb/remote.c')
-rw-r--r-- | gdb/remote.c | 10 |
1 files changed, 0 insertions, 10 deletions
diff --git a/gdb/remote.c b/gdb/remote.c index 49eeb63..f285beb 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -6571,16 +6571,6 @@ remote_target::resume (ptid_t ptid, int step, enum gdb_signal siggnal) for (thread_info *tp : all_non_exited_threads (this, ptid)) get_remote_thread_info (tp)->set_resumed (); - /* We are about to start executing the inferior, let's register it - with the event loop. NOTE: this is the one place where all the - execution commands end up. We could alternatively do this in each - of the execution commands in infcmd.c. */ - /* FIXME: ezannoni 1999-09-28: We may need to move this out of here - into infcmd.c in order to allow inferior function calls to work - NOT asynchronously. */ - if (target_can_async_p ()) - target_async (1); - /* We've just told the target to resume. The remote server will wait for the inferior to stop, and then send a stop reply. In the mean time, we can't start another command/query ourselves |