From fef6a27d78eed65615cb7887a40bbcaebe12dbe9 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Tue, 23 Jun 2009 23:09:36 +0000 Subject: [PATCH] * 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 --- src/apps/debugger/TeamDebugger.cpp | 10 +++++----- .../debugger/debugger_interface/DebuggerInterface.cpp | 9 +++++++-- .../debugger/debugger_interface/DebuggerInterface.h | 2 +- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/apps/debugger/TeamDebugger.cpp b/src/apps/debugger/TeamDebugger.cpp index c51edce97f..730632ffbe 100644 --- a/src/apps/debugger/TeamDebugger.cpp +++ b/src/apps/debugger/TeamDebugger.cpp @@ -48,17 +48,17 @@ TeamDebugger::~TeamDebugger() fTerminating = true; - fDebuggerInterface->Close(); - fWorker->ShutDown(); + if (fDebuggerInterface != NULL) + fDebuggerInterface->Close(fKillTeamOnQuit); + + if (fWorker != NULL) + fWorker->ShutDown(); locker.Unlock(); if (fDebugEventListener >= 0) wait_for_thread(fDebugEventListener, NULL); - if (fKillTeamOnQuit && fTeam != NULL) - kill_team(fTeam->ID()); - delete fDebuggerInterface; delete fWorker; delete fDebugModel; diff --git a/src/apps/debugger/debugger_interface/DebuggerInterface.cpp b/src/apps/debugger/debugger_interface/DebuggerInterface.cpp index 4a0b8cd635..0714c3b640 100644 --- a/src/apps/debugger/debugger_interface/DebuggerInterface.cpp +++ b/src/apps/debugger/debugger_interface/DebuggerInterface.cpp @@ -237,7 +237,7 @@ DebuggerInterface::~DebuggerInterface() { fArchitecture->RemoveReference(); - Close(); + Close(false); delete fDebugContextPool; } @@ -286,8 +286,13 @@ DebuggerInterface::Init() void -DebuggerInterface::Close() +DebuggerInterface::Close(bool killTeam) { + if (killTeam) + kill_team(fTeamID); + else if (fNubPort >= 0) + remove_team_debugger(fTeamID); + if (fDebuggerPort >= 0) delete_port(fDebuggerPort); } diff --git a/src/apps/debugger/debugger_interface/DebuggerInterface.h b/src/apps/debugger/debugger_interface/DebuggerInterface.h index c5f65d6268..7ef3e62563 100644 --- a/src/apps/debugger/debugger_interface/DebuggerInterface.h +++ b/src/apps/debugger/debugger_interface/DebuggerInterface.h @@ -27,7 +27,7 @@ public: virtual ~DebuggerInterface(); status_t Init(); - void Close(); + void Close(bool killTeam); Architecture* GetArchitecture() const { return fArchitecture; }