labath added a reviewer: jingham.
labath added a comment.

Well, this is an interesting problem... IIUC, what's happening is that the 
printing of the "stop reason" in the "event handler thread" is generating some 
packets (to fetch the stop reason), and then the "cont" command produces some 
(c) too...

I'm wondering if this problem does not go beyond reproducers... The fact that 
we can have two threads running in parallel, doing stuff, without much 
synchronization seems like a bad idea in general. In theory, something similar 
could happen during normal operation as well, if the user was fast enough to 
type "cont<Return>" before the stop reason is printed. In the non-reproducer 
mode we wouldn't crash with the unexpected packet assertion, but we would 
probably do something unexpected nonetheless. Of course, a real human user 
won't be fast enough to do that, but I wouldn't rule out this being the cause 
of the flakiness of some of our pexpect tests. And I'm not sure what happens 
when sourcing command files, which is fairly similar to running a reproducer. 
How would the events be processed there?

So, I'm wondering if we shouldn't add some form of synchronization here, which 
would be independent of the reproducer mode we're running in. That would solve 
the reproducer problem as a consequence, but it seems like it would be 
generally useful. One way to do that could be to send some sort of a ping event 
(EventDataReceipt ?) to the event handler thread before or after running a 
command, and wait for it to report back. That should ensure that all events 
produced by the previous command have been fully processed...


Repository:
  rLLDB LLDB

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

https://reviews.llvm.org/D83446



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

Reply via email to