aboutsummaryrefslogtreecommitdiff
path: root/gdb/f-lang.c
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@efficios.com>2021-02-04 13:34:11 -0500
committerSimon Marchi <simon.marchi@polymtl.ca>2021-02-04 13:34:11 -0500
commitbaa8575b29fe83e158e203485d4d019621c0d245 (patch)
treefe69f9841fe4b890d4a27d9c33b478356584d5bd /gdb/f-lang.c
parent6b36ddeb1edbdc3039075e4e220a108579b82121 (diff)
downloadbinutils-baa8575b29fe83e158e203485d4d019621c0d245.zip
binutils-baa8575b29fe83e158e203485d4d019621c0d245.tar.gz
binutils-baa8575b29fe83e158e203485d4d019621c0d245.tar.bz2
gdb: make remote target clear its handler in remote_target::wait
The remote target's remote_async_inferior_event_token is a flag that tells when it wants the infrun loop to call its wait method. The flag is cleared in the async_event_handler's callback (remote_async_inferior_event_handler), just before calling inferior_event_handler. However, since inferior_event_handler may actually call another target's wait method, there needs to be code that checks if we need to re-raise the flag. It would be simpler instead for remote_target::wait to clear the flag when it returns an event and there are no more to report after that. If another target's wait method gets called by inferior_event_handler, the remote target's flag will stay naturally stay marked. Note that this is already partially implemented in remote_target::wait, since the remote target may have multiple events to report (and it can only report one at the time): if (target_is_async_p ()) { remote_state *rs = get_remote_state (); /* If there are are events left in the queue tell the event loop to return here. */ if (!rs->stop_reply_queue.empty ()) mark_async_event_handler (rs->remote_async_inferior_event_token); } The code in remote_async_inferior_event_handler also checks for pending events as well, in addition to the stop reply queue, so I've made remote_target::wait check for that as well. I'm not completely sure this is ok, since I don't understand very well how the pending events mechanism works. But I figured it was safer to do this, worst case it just leads to unnecessary calls to remote_target::wait. gdb/ChangeLog: * remote.c (remote_target::wait): Clear async event handler at beginning, mark if needed at the end. (remote_async_inferior_event_handler): Don't set or clear async event handler. Change-Id: I20117f5b5acc8a9972c90f16280249b766c1bf37
Diffstat (limited to 'gdb/f-lang.c')
0 files changed, 0 insertions, 0 deletions