diff options
author | Andrew Burgess <aburgess@redhat.com> | 2021-11-22 12:30:36 +0000 |
---|---|---|
committer | Andrew Burgess <aburgess@redhat.com> | 2021-12-18 10:19:55 +0000 |
commit | 8d34471f70a84e6db89be40116d1ed0f6af941c0 (patch) | |
tree | a056df775b6d84e5513a8d3b03a4ed1f68347342 /gdb | |
parent | 4f626cad041b96f78bae75a2d24d1573f382e12b (diff) | |
download | gdb-8d34471f70a84e6db89be40116d1ed0f6af941c0.zip gdb-8d34471f70a84e6db89be40116d1ed0f6af941c0.tar.gz gdb-8d34471f70a84e6db89be40116d1ed0f6af941c0.tar.bz2 |
gdb: add assert in remote_target::wait relating to async being off
While working on another patch I ended up in a situation where I had
async mode disabled (with 'maint set target-async off'), but the async
event token got marked anyway.
In this situation GDB was continually calling into
remote_target::wait, however, the async token would never become
unmarked as the unmarking is guarded by target_is_async_p.
We could just unconditionally unmark the token, but that would feel
like just ignoring a bug, so, instead, lets assert that if
!target_is_async_p, then the async token should not be marked.
This assertion would have caught my earlier mistake.
There should be no user visible changes with this commit.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/remote.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/gdb/remote.c b/gdb/remote.c index f0f3dcb..1bb6138 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -8348,9 +8348,13 @@ remote_target::wait (ptid_t ptid, struct target_waitstatus *status, remote_state *rs = get_remote_state (); /* Start by clearing the flag that asks for our wait method to be called, - we'll mark it again at the end if needed. */ + we'll mark it again at the end if needed. If the target is not in + async mode then the async token should not be marked. */ if (target_is_async_p ()) clear_async_event_handler (rs->remote_async_inferior_event_token); + else + gdb_assert (!async_event_handler_marked + (rs->remote_async_inferior_event_token)); ptid_t event_ptid; |