aboutsummaryrefslogtreecommitdiff
path: root/gdb/remote.c
diff options
context:
space:
mode:
authorAndrew Burgess <aburgess@redhat.com>2021-11-22 12:30:36 +0000
committerAndrew Burgess <aburgess@redhat.com>2021-11-25 10:00:40 +0000
commit32b1f5e8d6b8ddd3be6e471c26dd85a1dac31dda (patch)
treed3d10088abdd7e89c7d1c360386d35406ae4d043 /gdb/remote.c
parent7054fa5bcaea3ce1a2f10a8ca550db96564035db (diff)
downloadfsf-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.c6
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;