[Lldb-commits] [lldb] [lldb-dap] Migrating 'threads' request to structured types. (PR #142510)
Ebuka Ezike via lldb-commits
lldb-commits at lists.llvm.org
Wed Jun 4 04:50:29 PDT 2025
================
@@ -116,78 +119,78 @@ void SendProcessEvent(DAP &dap, LaunchMethod launch_method) {
// Send a thread stopped event for all threads as long as the process
// is stopped.
-void SendThreadStoppedEvent(DAP &dap) {
+llvm::Error SendThreadStoppedEvent(DAP &dap, bool on_entry) {
+ lldb::SBMutex lock = dap.GetAPIMutex();
+ std::lock_guard<lldb::SBMutex> guard(lock);
+
lldb::SBProcess process = dap.target.GetProcess();
- if (process.IsValid()) {
- auto state = process.GetState();
- if (state == lldb::eStateStopped) {
- llvm::DenseSet<lldb::tid_t> old_thread_ids;
- old_thread_ids.swap(dap.thread_ids);
- uint32_t stop_id = process.GetStopID();
- const uint32_t num_threads = process.GetNumThreads();
-
- // First make a pass through the threads to see if the focused thread
- // has a stop reason. In case the focus thread doesn't have a stop
- // reason, remember the first thread that has a stop reason so we can
- // set it as the focus thread if below if needed.
- lldb::tid_t first_tid_with_reason = LLDB_INVALID_THREAD_ID;
- uint32_t num_threads_with_reason = 0;
- bool focus_thread_exists = false;
- for (uint32_t thread_idx = 0; thread_idx < num_threads; ++thread_idx) {
- lldb::SBThread thread = process.GetThreadAtIndex(thread_idx);
- const lldb::tid_t tid = thread.GetThreadID();
- const bool has_reason = ThreadHasStopReason(thread);
- // If the focus thread doesn't have a stop reason, clear the thread ID
- if (tid == dap.focus_tid) {
- focus_thread_exists = true;
- if (!has_reason)
- dap.focus_tid = LLDB_INVALID_THREAD_ID;
- }
- if (has_reason) {
- ++num_threads_with_reason;
- if (first_tid_with_reason == LLDB_INVALID_THREAD_ID)
- first_tid_with_reason = tid;
- }
- }
+ if (!process.IsValid())
+ return make_error<DAPError>("invalid process");
+
+ lldb::StateType state = process.GetState();
+ if (!lldb::SBDebugger::StateIsStoppedState(state))
+ return make_error<NotStoppedError>();
+
+ llvm::DenseSet<lldb::tid_t> old_thread_ids;
+ old_thread_ids.swap(dap.thread_ids);
+ uint32_t stop_id = on_entry ? 0 : process.GetStopID();
----------------
da-viper wrote:
```suggestion
uint32_t stop_id = on_entry ? LLDB_INVALID_STOP_ID : process.GetStopID();
```
I assume the `0` is for an invalid stop id ?
https://github.com/llvm/llvm-project/pull/142510
More information about the lldb-commits
mailing list