From 6313c05640cf6e2f6b1b1b8e66789b34b45f19c7 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Fri, 23 Feb 2024 13:26:02 -0700 Subject: [PATCH] Add final cleanup for runnables 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 | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/gdb/run-on-main-thread.c b/gdb/run-on-main-thread.c index 2d40048de56..7b9807e0eaf 100644 --- a/gdb/run-on-main-thread.c +++ b/gdb/run-on-main-thread.c @@ -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 (); + }); }