]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Add final cleanup for runnables
authorTom Tromey <tromey@adacore.com>
Fri, 23 Feb 2024 20:26:02 +0000 (13:26 -0700)
committerTom Tromey <tromey@adacore.com>
Tue, 27 Feb 2024 17:30:29 +0000 (10:30 -0700)
This changes run-on-main-thread.c to clear 'runnables' in a final
cleanup.  This avoids an issue where a pending runnable could require
Python, but be run after the Python interpreter was finalized.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31172

gdb/run-on-main-thread.c

index 2d40048de56bab6a02dfbd55b4ee312a62eb299e..7b9807e0eaf09d7ea9bafe3cadf8858da64839a2 100644 (file)
@@ -133,4 +133,15 @@ _initialize_run_on_main_thread ()
   runnable_event = make_serial_event ();
   add_file_handler (serial_event_fd (runnable_event), run_events, nullptr,
                    "run-on-main-thread");
+
+  /* A runnable may refer to an extension language.  So, we want to
+     make sure any pending ones have been deleted before the extension
+     languages are shut down.  */
+  add_final_cleanup ([] ()
+    {
+#if CXX_STD_THREAD
+      std::lock_guard lock (runnable_mutex);
+#endif
+      runnables.clear ();
+    });
 }