diff --git a/src/bin/debug/profile/Team.h b/src/bin/debug/profile/Team.h index deae2eba56..772e0e2845 100644 --- a/src/bin/debug/profile/Team.h +++ b/src/bin/debug/profile/Team.h @@ -9,6 +9,7 @@ #include #include +#include #include #include "Thread.h" @@ -19,7 +20,7 @@ class SharedImage; struct system_profiler_team_added; -class Team { +class Team : public BReferenceable { public: Team(); ~Team(); diff --git a/src/bin/debug/profile/Thread.cpp b/src/bin/debug/profile/Thread.cpp index c82608177a..b8cec22651 100644 --- a/src/bin/debug/profile/Thread.cpp +++ b/src/bin/debug/profile/Thread.cpp @@ -51,6 +51,7 @@ Thread::Thread(thread_id threadID, const char* name, Team* team) fProfileResult(NULL), fLazyImages(true) { + fTeam->AcquireReference(); } @@ -66,6 +67,8 @@ Thread::~Thread() delete image; while (ThreadImage* image = fOldImages.RemoveHead()) delete image; + + fTeam->ReleaseReference(); } diff --git a/src/bin/debug/profile/profile.cpp b/src/bin/debug/profile/profile.cpp index 67e14d7190..377644ab8c 100644 --- a/src/bin/debug/profile/profile.cpp +++ b/src/bin/debug/profile/profile.cpp @@ -101,7 +101,7 @@ class ThreadManager : private ProfiledEntity { public: ThreadManager(port_id debuggerPort) : - fTeams(20, true), + fTeams(20), fThreads(20, true), fKernelTeam(NULL), fDebuggerPort(debuggerPort), @@ -117,6 +117,9 @@ public: if (fSummaryProfileResult != NULL) fSummaryProfileResult->ReleaseReference(); + + for (int32 i = 0; Team* team = fTeams.ItemAt(i); i++) + team->ReleaseReference(); } status_t Init() @@ -193,7 +196,8 @@ public: if (Team* team = FindTeam(teamID)) { if (team == fKernelTeam) fKernelTeam = NULL; - fTeams.RemoveItem(team, true); + fTeams.RemoveItem(team); + team->ReleaseReference(); } } @@ -308,7 +312,7 @@ private: ? _InitUndebuggedTeam(team, addedInfo) : _InitDebuggedTeam(team, teamID); if (error != B_OK) { - delete team; + team->ReleaseReference(); return error; }