ilya-nozhkin added a comment.

Yeah, I understand the problem of two listeners trying to change process state 
simultaneously and I agree that informing other listeners once the primary one 
finished its job would be a great solution. But the problem is that primary 
listener just provides an event to some user code (via GetEvent) and there is 
no way to find out when this code has finished without requiring it to invoke a 
handshake explicitly.

One of the possible solutions is to send a specifically marked event to a 
primary listener first. Then, make this event to invoke a handshake in its 
destructor (which would mean that primary listener doesn't need the event 
anymore). And handshake can be implemented as just a rebroadcasting a new 
instance of the event to other listeners (or via unlocking some additional 
mutex / notifying some conditional variable). However, destructor may be 
invoked not immediately after event processing is finished. For example, if a 
primary listener's thread defines an EventSP before the listening cycle and 
doesn't reset it until GetEvent returns a new one (which may not happen until 
the next stop, for example).

Anyway, the concept of primary and secondary listeners requires to forbid 
secondary listeners to do "step" or "continue" at all. So, why can't we do the 
same without any additional code? I mean, I think that the most common case of 
multiple listeners is a Python extension adding a listener to read/write some 
memory/registers on each stop taking the RunLock. So, it does not interfere 
with a primary listener except for simultaneous DoOnRemoval invocation (which 
is fixed by this patch). Moreover, as I understand, there is no any way to 
implement such extension without adding a new listener (because if one would 
try to use Debugger's default listener then all other users such as 
lldb-vscode, for example, couldn't handle process events anymore).


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D86652

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

Reply via email to