]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Windows gdb: Introduce continue_last_debug_event_main_thread
authorPedro Alves <pedro@palves.net>
Thu, 21 Oct 2021 17:16:58 +0000 (18:16 +0100)
committerPedro Alves <pedro@palves.net>
Mon, 9 Jun 2025 17:09:13 +0000 (18:09 +0100)
We have code using do_synchronously to call continue_last_debug_event,
and later patches in the series would need to add the same code in few
more places.  Factor it out to a continue_last_debug_event_main_thread
function so these other places in future patches can just call it.

In v2:
 - Fix context_str not used in the body of the method.

Change-Id: I945e668d2b3daeb9de968219925a7b3c7c7ce9ed

gdb/windows-nat.c

index a81a7eebfe95b2ffb7ccf0f11f3a4280e6771f3a..7d72cab788649207f3a5d52bf394fa95017308c0 100644 (file)
@@ -346,6 +346,12 @@ private:
      needed.  */
   void wait_for_debug_event_main_thread (DEBUG_EVENT *event);
 
+  /* This continues the last debug event, dispatching to the worker
+     thread as needed.  */
+  void continue_last_debug_event_main_thread (const char *context_str,
+                                             DWORD continue_status,
+                                             bool last_call = false);
+
   /* Force the process_thread thread to return from WaitForDebugEvent.
      PROCESS_ALIVE is set to false if the inferior process exits while
      we're trying to break out the process_thread thread.  This can
@@ -509,6 +515,28 @@ windows_nat_target::wait_for_debug_event_main_thread (DEBUG_EVENT *event)
   m_continued = false;
 }
 
+void
+windows_nat_target::continue_last_debug_event_main_thread
+  (const char *context_str, DWORD continue_status, bool last_call)
+{
+  std::optional<unsigned> err;
+  do_synchronously ([&] ()
+    {
+      if (!continue_last_debug_event (continue_status, debug_events))
+       err = (unsigned) GetLastError ();
+
+      /* On the last call, do not block waiting for an event that will
+        never come.  */
+      return !last_call;
+    });
+  if (err.has_value ())
+    throw_winerror_with_name (string_printf (_("ContinueDebugEvent failed: %s"),
+                                            context_str).c_str (),
+                             *err);
+
+  m_continued = !last_call;
+}
+
 /* See nat/windows-nat.h.  */
 
 windows_thread_info *
@@ -1233,22 +1261,9 @@ windows_nat_target::windows_continue (DWORD continue_status, int id,
        th->resume ();
       }
 
-  std::optional<unsigned> err;
-  do_synchronously ([&] ()
-    {
-      if (!continue_last_debug_event (continue_status, debug_events))
-       err = (unsigned) GetLastError ();
-      /* On the last call, do not block waiting for an event that will
-        never come.  */
-      return !last_call;
-    });
-
-  if (err.has_value ())
-    throw_winerror_with_name (_("Failed to resume program execution"
-                               " - ContinueDebugEvent failed"),
-                             *err);
-
-  m_continued = !last_call;
+  continue_last_debug_event_main_thread
+    (_("Failed to resume program execution"), continue_status,
+     last_call);
 
   return TRUE;
 }