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
This commit is contained in:
Tom Tromey 2024-02-23 13:26:02 -07:00
parent ec471b627a
commit 6313c05640

View 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 ();
});
}