================
Comment at: tools/lldb-mi/MICmnLLDBDebugger.cpp:300
@@ -299,2 +299,3 @@
     bOk = bOk && RegisterForEvent(strDbgId, 
CMIUtilString(lldb::SBCommandInterpreter::GetBroadcasterClass()), eventMask);
+    
m_lldbDebugger.GetCommandInterpreter().GetBroadcaster().CheckInWithManager();
 
----------------
ki.stfu wrote:
> clayborg wrote:
> > ki.stfu wrote:
> > > abidh wrote:
> > > > Why we have to do this for command interpreter? 
> > > Because CommandInterpreter object already has been created in contrast to 
> > > Target/Thread/Process.
> > You shouldn't have to do this, it is being done in the 
> > lldb_private::CommandInterpreter::CommandInterpreter(). How did you manage 
> > to not contract a CommandInterpreter and yet you are able to listen to 
> > events from it?
> >RE: You shouldn't have to do this, it is being done in the 
> >lldb_private::CommandInterpreter::CommandInterpreter().
> But I have a problem:
> # CMICmnLLDBDebugger::InitSBListener() registers events (which are needed for 
> lldb-mi) using the SBListener::StartListeningForEventClass().
> # SBListener::StartListeningForEventClass() is used for classes that weren't 
> created (otherwise the SBBroadcast::CheckInWithManager() should be called).
> # In this situation, we register events (using 
> SBListener::StartListeningForEventClass()) for already created class 
> SBCommandInterpreter. I can't register events before this class is created 
> because it is done simultaneously with SBDebugger (which is used in 
> SBListener::StartListeningForEventClass()).
> 
> I assume we can use SBListener::StartListeningForEventClass() for 
> SBTarget/SBProcess/SBThread and SBListener::StartListeningForEvents() for 
> SBCommandInterpreter but I'm not sure that it's right solution.
> 
> Do we have any restrictions to use SBListener::StartListeningForEventClass()?
> 
> >RE: How did you manage to not contract a CommandInterpreter and yet you are 
> >able to listen to events from it?
> Previously lldb-mi ignored all CommandInterpreter's events.
There are two restrictions for SBListener::StartListeningForEventClass.  The 
first is that the debugger you pass into the call must be a valid debugger.  
Otherwise the StartListeningForEventClass will return 0, meaning you got signed 
up for no event bits.  Although lldb supports multiple debuggers, it does not 
support coordination among debuggers, you can't have a listener that listens to 
all classes of events for all debuggers.  So this restriction is necessary.

The other restriction in the BroadcasterManager is that we only let one 
listener sign up for events of a given class/bit pair.  So if somebody else had 
grabbed that bit for that event already, then you wouldn't get it.  Again, you 
should be able to tell from the return value to StartListeningForEventClass 
whether you got the bits you requested or not (the call will return 0 if there 
are no available bits.)

If the problem is some other listener already acquired the event spec you are 
asking for, we can relax the requirement that event class listeners be unique.  
We went back & forth about whether we wanted to support multiple listeners for 
some events or not.  Looks like I did the BroadcasterManager stuff at the point 
where we wanted one Listener per Broadcaster/EventBit.  For the most part,  
however, Events can really be "broadcast" rather than go to a single listener 
without causing problems.  So I have no problem relaxing this restriction for 
listening by event class.

The exception to this is that the Process broadcaster really needs to have only 
one StateChanged listener.  When you create a process you have to give it the 
Listener that is going to drive it.  So we don't want people to sign up for 
Process events by class.  So if the problem is not allowing multiple listeners 
per class, we can change BroadcasterManager::RegisterListenerForEvents to not 
filter the request against the extant listeners.  But then we should add a call 
to the BroadcasterManager to say which BroadcasterEventSpec's can't be listened 
for by class - and make the Debugger outlaw listening to Process events by 
class.

http://reviews.llvm.org/D8382

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/



_______________________________________________
lldb-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits

Reply via email to