labath added a comment.

Though I have messed with IOHandlers in the past, I have successfully 
suppressed most of the memories of it. I think I have a rough understanding of 
what the bug is, but I don't understand the solution yet.

With this patch, what does guarantee that the IOHandler for the `"command 
source -s true ./test.lldb"` thingy completes before the breakpoint callback is 
finished (I assume that the intention is for this to be executed synchronously)?

I don't know if this matters, but another detail to be aware of is that the 
IOHandler stack will be different if driving lldb through python (without 
calling SBDebugger::RunCommandInterpreter). In this case there won't be a stdio 
editline handler sitting at the bottom of the stack.



================
Comment at: lldb/source/Core/Debugger.cpp:1020
+  // they aren't running yet.
+  if (asynchronous_if_needed && !m_synchronous_reader_lock.owns_lock()) {
+    ExecuteIOHandlers();
----------------
This looks very clever, but it can still be racy if someone calls 
ExecuteIOHandlers concurrently to the `owns_lock` check...

A better way to achieve this (if I understand correctly what you are trying to 
achieve) would be to have a `ExecuteIOHandlersIfNeeded` function which does 
something like
```
std::unique_lock lock(m_synchronous_reader_mutex, std::try_lock);
if (lock)
  ReallyExecuteIOHandlers(); // No locking in here
```


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D72748/new/

https://reviews.llvm.org/D72748



_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to