diff options
author | Andrew Burgess <aburgess@redhat.com> | 2021-11-22 12:30:36 +0000 |
---|---|---|
committer | Andrew Burgess <aburgess@redhat.com> | 2021-11-25 10:00:40 +0000 |
commit | 32b1f5e8d6b8ddd3be6e471c26dd85a1dac31dda (patch) | |
tree | d3d10088abdd7e89c7d1c360386d35406ae4d043 /gdb/remote.c | |
parent | 7054fa5bcaea3ce1a2f10a8ca550db96564035db (diff) | |
download | fsf-binutils-gdb-32b1f5e8d6b8ddd3be6e471c26dd85a1dac31dda.zip fsf-binutils-gdb-32b1f5e8d6b8ddd3be6e471c26dd85a1dac31dda.tar.gz fsf-binutils-gdb-32b1f5e8d6b8ddd3be6e471c26dd85a1dac31dda.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/remote.c')
-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 25a4d3c..da8ed81 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -8309,9 +8309,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; |