* Moved killing/resuming the team to DebuggerInterface::Close().

* Made the TeamDebugger safer for the case that the initialization failed early.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31218 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold 2009-06-23 23:09:36 +00:00
parent e951f678c2
commit fef6a27d78
3 changed files with 13 additions and 8 deletions

View File

@ -48,7 +48,10 @@ TeamDebugger::~TeamDebugger()
fTerminating = true; fTerminating = true;
fDebuggerInterface->Close(); if (fDebuggerInterface != NULL)
fDebuggerInterface->Close(fKillTeamOnQuit);
if (fWorker != NULL)
fWorker->ShutDown(); fWorker->ShutDown();
locker.Unlock(); locker.Unlock();
@ -56,9 +59,6 @@ TeamDebugger::~TeamDebugger()
if (fDebugEventListener >= 0) if (fDebugEventListener >= 0)
wait_for_thread(fDebugEventListener, NULL); wait_for_thread(fDebugEventListener, NULL);
if (fKillTeamOnQuit && fTeam != NULL)
kill_team(fTeam->ID());
delete fDebuggerInterface; delete fDebuggerInterface;
delete fWorker; delete fWorker;
delete fDebugModel; delete fDebugModel;

View File

@ -237,7 +237,7 @@ DebuggerInterface::~DebuggerInterface()
{ {
fArchitecture->RemoveReference(); fArchitecture->RemoveReference();
Close(); Close(false);
delete fDebugContextPool; delete fDebugContextPool;
} }
@ -286,8 +286,13 @@ DebuggerInterface::Init()
void void
DebuggerInterface::Close() DebuggerInterface::Close(bool killTeam)
{ {
if (killTeam)
kill_team(fTeamID);
else if (fNubPort >= 0)
remove_team_debugger(fTeamID);
if (fDebuggerPort >= 0) if (fDebuggerPort >= 0)
delete_port(fDebuggerPort); delete_port(fDebuggerPort);
} }

View File

@ -27,7 +27,7 @@ public:
virtual ~DebuggerInterface(); virtual ~DebuggerInterface();
status_t Init(); status_t Init();
void Close(); void Close(bool killTeam);
Architecture* GetArchitecture() const Architecture* GetArchitecture() const
{ return fArchitecture; } { return fArchitecture; }