[Lldb-commits] [lldb] [lldb-dap] Change the launch sequence (PR #138219)
John Harrison via lldb-commits
lldb-commits at lists.llvm.org
Fri May 2 11:39:17 PDT 2025
================
@@ -938,15 +954,30 @@ llvm::Error DAP::Loop() {
StopEventHandlers();
});
- while (!disconnecting || !m_queue.empty()) {
+ while (true) {
std::unique_lock<std::mutex> lock(m_queue_mutex);
- m_queue_cv.wait(lock, [&] { return disconnecting || !m_queue.empty(); });
+ m_queue_cv.wait(lock, [&] {
+ return disconnecting || !m_queue.empty() ||
+ (!m_launch_sequence_queue.empty() && configuration_done);
+ });
- if (m_queue.empty())
+ if (disconnecting)
break;
- Message next = m_queue.front();
- m_queue.pop_front();
+ bool is_launch_seqeuence =
+ !m_launch_sequence_queue.empty() && configuration_done;
+
+ auto &active_queue =
+ is_launch_seqeuence ? m_launch_sequence_queue : m_queue;
+
+ assert(!active_queue.empty() &&
+ "shouldn't have gotten past the wait with an empty queue");
----------------
ashgti wrote:
What if we kept the messages in the `m_launch_sequence_queue` until `configurationDone` and in `configurationDone` `PostRun()` we move the items in the `m_launch_sequence_queue` into the front of `m_queue`?
Then this loop would only need to check the `m_queue.empty()` and have a few less branching paths.
We could add a helper like:
```
void DAP::SetConfigurationDone() {
std::lock_guard<std::mutex> guard(m_queue_mutex);
std::copy(m_launch_sequence_queue.front(), m_launch_sequence_queue.end(), std::front_inserter(m_queue));
configuration_done = true;
}
```
and call in `ConfigurationDoneRequestHandler`.
https://github.com/llvm/llvm-project/pull/138219
More information about the lldb-commits
mailing list