================
@@ -623,8 +630,20 @@ void Debugger::Terminate() {
   }
 
   if (g_thread_pool) {
-    // The destructor will wait for all the threads to complete.
-    delete g_thread_pool;
+    // Delete the thread pool in a different thread so we can set a timeout.
----------------
JDevlieghere wrote:

> Or is it too late and no one would receive events?

Yup, that's exactly the problem. The debugger has already been destroyed at 
this point, otherwise I could've written to the debugger's output stream. By 
the time we terminate, there's pretty much nothing left at this point.   Before 
I had the callback I just wrote to stderr directly, but that's not a very nice 
thing to do as a library. 

> Another option would be to have the thread pool detach from all threads so 
> that we don't need to wait until they complete and just go ahead and exit?

That's what we did in the past and that caused a bunch of crashes. If you want 
to do that without crashing, you need to be very careful about what you do in a 
task running on the thread pool, because the debugger might have been destroyed 
and terminated while you were running. 

https://github.com/llvm/llvm-project/pull/82799
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to