aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorAndrew Burgess <aburgess@redhat.com>2021-11-22 12:30:36 +0000
committerAndrew Burgess <aburgess@redhat.com>2021-12-18 10:19:55 +0000
commit8d34471f70a84e6db89be40116d1ed0f6af941c0 (patch)
treea056df775b6d84e5513a8d3b03a4ed1f68347342 /gdb
parent4f626cad041b96f78bae75a2d24d1573f382e12b (diff)
downloadgdb-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.c6
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;