gdb: add assertion when marking the remote async flag
authorSimon Marchi <simon.marchi@efficios.com>
Wed, 4 Oct 2023 02:04:01 +0000 (22:04 -0400)
committerSimon Marchi <simon.marchi@efficios.com>
Tue, 10 Oct 2023 15:02:00 +0000 (11:02 -0400)
As reported in bug 30630 [1], we hit a case where the remote target's
async flag is marked while the target is not configured (yet) to work
async.  This should not happen.  It is caught thanks to this assert in
remote_target::wait:

    /* Start by clearing the flag that asks for our wait method to be called,
       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 ())
      rs->clear_async_event_handler ();
    else
      gdb_assert (!rs->async_event_handler_marked ());

This is helpful, but I think that we could have caught the problem earlier than
that, at the moment we marked the handler.  Catching problems earlier
makes them easier to debug.

[1] https://sourceware.org/bugzilla/show_bug.cgi?id=30630

Change-Id: I7e229c74b04da82bef6a817d5a676be5cf52e833
Approved-By: Andrew Burgess <aburgess@redhat.com>
gdb/remote.c

index 5f12f93ef4f5b058e8f767206523e4f2a58712e4..961061e02a9f68b55276725ec2bf38351b136d77 100644 (file)
@@ -425,7 +425,10 @@ public:
   }
 
   void mark_async_event_handler ()
-  { ::mark_async_event_handler (m_async_event_handler_token); }
+  {
+    gdb_assert (this->is_async_p ());
+    ::mark_async_event_handler (m_async_event_handler_token);
+  }
 
   void clear_async_event_handler ()
   { ::clear_async_event_handler (m_async_event_handler_token); }