JDevlieghere wrote:

I tried implementing this and waiting on the thread pool when the last debugger 
is being destroyed is easy:

```
  // Only hold the debugger list lock long enough to check if we're the last
  // debugger being destroyed.
  bool last_debugger_being_destroyed = false;
  if (g_debugger_list_ptr && g_debugger_list_mutex_ptr) {
    std::lock_guard<std::recursive_mutex> guard(*g_debugger_list_mutex_ptr);
    last_debugger_being_destroyed =
        g_debugger_list_ptr->size() == 1 &&
        (*g_debugger_list_ptr)[0].get() == debugger_sp.get();
  }

  // Check if we should wait on the thread pool. If the debugger being destroyed
  // is the very last one, we can safely assume work is being done on its
  // behalf. We want to keep the debugger alive at least until the background
  // tasks are finished so they can report their progress.
  if (last_debugger_being_destroyed)
    g_thread_pool->wait();
```

However, at that point there's no default event handler thread anymore: we tear 
it down when exiting `RunCommandInterpreter`. I think I'm just going to move 
the timeout to the driver and call it a day... 

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