diff --git a/src/apps/debugger/target_host_interface/TargetHostInterfaceRoster.cpp b/src/apps/debugger/target_host_interface/TargetHostInterfaceRoster.cpp index 5305f7f8667..bc520ae8e9c 100644 --- a/src/apps/debugger/target_host_interface/TargetHostInterfaceRoster.cpp +++ b/src/apps/debugger/target_host_interface/TargetHostInterfaceRoster.cpp @@ -10,7 +10,6 @@ #include #include "LocalTargetHostInterfaceInfo.h" -#include "TargetHostInterface.h" #include "TargetHostInterfaceInfo.h" @@ -20,7 +19,9 @@ TargetHostInterfaceRoster::TargetHostInterfaceRoster() : + TargetHostInterface::Listener(), fLock(), + fRunningTeamDebuggers(0), fInterfaceInfos(20, false), fActiveInterfaces(20, false) { @@ -136,6 +137,7 @@ TargetHostInterfaceRoster::CreateInterface(TargetHostInterfaceInfo* info, return B_NO_MEMORY; } + interface->AddListener(this); _interface = interface; return B_OK; } @@ -155,14 +157,24 @@ TargetHostInterfaceRoster::ActiveInterfaceAt(int32 index) const } -int32 -TargetHostInterfaceRoster::CountRunningTeamDebuggers() const +void +TargetHostInterfaceRoster::TeamDebuggerStarted(TeamDebugger* debugger) { - int32 total = 0; - for (int32 i = 0; TargetHostInterface* interface = ActiveInterfaceAt(i); - i++) { - total += interface->CountTeamDebuggers(); - } + fRunningTeamDebuggers++; +} + + +void +TargetHostInterfaceRoster::TeamDebuggerQuit(TeamDebugger* debugger) +{ + fRunningTeamDebuggers--; +} + - return total; +void +TargetHostInterfaceRoster::TargetHostInterfaceQuit( + TargetHostInterface* interface) +{ + AutoLocker locker(this); + fActiveInterfaces.RemoveItem(interface); } diff --git a/src/apps/debugger/target_host_interface/TargetHostInterfaceRoster.h b/src/apps/debugger/target_host_interface/TargetHostInterfaceRoster.h index d09ff9b2426..9016aa457c3 100644 --- a/src/apps/debugger/target_host_interface/TargetHostInterfaceRoster.h +++ b/src/apps/debugger/target_host_interface/TargetHostInterfaceRoster.h @@ -10,13 +10,14 @@ #include #include +#include "TargetHostInterface.h" + class Settings; -class TargetHostInterface; class TargetHostInterfaceInfo; -class TargetHostInterfaceRoster { +class TargetHostInterfaceRoster : private TargetHostInterface::Listener { public: TargetHostInterfaceRoster(); virtual ~TargetHostInterfaceRoster(); @@ -42,7 +43,14 @@ class TargetHostInterfaceRoster { int32 CountActiveInterfaces() const; TargetHostInterface* ActiveInterfaceAt(int32 index) const; - int32 CountRunningTeamDebuggers() const; + int32 CountRunningTeamDebuggers() const + { return fRunningTeamDebuggers; } + + // TargetHostInterface::Listener + virtual void TeamDebuggerStarted(TeamDebugger* debugger); + virtual void TeamDebuggerQuit(TeamDebugger* debugger); + virtual void TargetHostInterfaceQuit( + TargetHostInterface* interface); private: typedef BObjectList InfoList; @@ -52,6 +60,7 @@ class TargetHostInterfaceRoster { BLocker fLock; static TargetHostInterfaceRoster* sDefaultInstance; + int32 fRunningTeamDebuggers; InfoList fInterfaceInfos; InterfaceList fActiveInterfaces; };