[haiku-commits] r35591 - haiku/trunk/src/bin/debug/profile

  • From: ingo_weinhold@xxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 23 Feb 2010 21:37:36 +0100 (CET)

Author: bonefish
Date: 2010-02-23 21:37:36 +0100 (Tue, 23 Feb 2010)
New Revision: 35591
Changeset: http://dev.haiku-os.org/changeset/35591/haiku

Modified:
   haiku/trunk/src/bin/debug/profile/Team.h
   haiku/trunk/src/bin/debug/profile/Thread.cpp
   haiku/trunk/src/bin/debug/profile/profile.cpp
Log:
Made Team BReferenceable. Since teams are usually destroyed before their main
thread, we were accessing already destroyed Team objects.


Modified: haiku/trunk/src/bin/debug/profile/Team.h
===================================================================
--- haiku/trunk/src/bin/debug/profile/Team.h    2010-02-23 19:18:17 UTC (rev 
35590)
+++ haiku/trunk/src/bin/debug/profile/Team.h    2010-02-23 20:37:36 UTC (rev 
35591)
@@ -9,6 +9,7 @@
 
 #include <debug_support.h>
 #include <ObjectList.h>
+#include <Referenceable.h>
 #include <util/DoublyLinkedList.h>
 
 #include "Thread.h"
@@ -19,7 +20,7 @@
 struct system_profiler_team_added;
 
 
-class Team {
+class Team : public BReferenceable {
 public:
                                                                Team();
                                                                ~Team();

Modified: haiku/trunk/src/bin/debug/profile/Thread.cpp
===================================================================
--- haiku/trunk/src/bin/debug/profile/Thread.cpp        2010-02-23 19:18:17 UTC 
(rev 35590)
+++ haiku/trunk/src/bin/debug/profile/Thread.cpp        2010-02-23 20:37:36 UTC 
(rev 35591)
@@ -51,6 +51,7 @@
        fProfileResult(NULL),
        fLazyImages(true)
 {
+       fTeam->AcquireReference();
 }
 
 
@@ -66,6 +67,8 @@
                delete image;
        while (ThreadImage* image = fOldImages.RemoveHead())
                delete image;
+
+       fTeam->ReleaseReference();
 }
 
 

Modified: haiku/trunk/src/bin/debug/profile/profile.cpp
===================================================================
--- haiku/trunk/src/bin/debug/profile/profile.cpp       2010-02-23 19:18:17 UTC 
(rev 35590)
+++ haiku/trunk/src/bin/debug/profile/profile.cpp       2010-02-23 20:37:36 UTC 
(rev 35591)
@@ -101,7 +101,7 @@
 public:
        ThreadManager(port_id debuggerPort)
                :
-               fTeams(20, true),
+               fTeams(20),
                fThreads(20, true),
                fKernelTeam(NULL),
                fDebuggerPort(debuggerPort),
@@ -117,6 +117,9 @@
 
                if (fSummaryProfileResult != NULL)
                        fSummaryProfileResult->ReleaseReference();
+
+               for (int32 i = 0; Team* team = fTeams.ItemAt(i); i++)
+                       team->ReleaseReference();
        }
 
        status_t Init()
@@ -193,7 +196,8 @@
                if (Team* team = FindTeam(teamID)) {
                        if (team == fKernelTeam)
                                fKernelTeam = NULL;
-                       fTeams.RemoveItem(team, true);
+                       fTeams.RemoveItem(team);
+                       team->ReleaseReference();
                }
        }
 
@@ -308,7 +312,7 @@
                        ? _InitUndebuggedTeam(team, addedInfo)
                        : _InitDebuggedTeam(team, teamID);
                if (error != B_OK) {
-                       delete team;
+                       team->ReleaseReference();
                        return error;
                }
 


Other related posts:

  • » [haiku-commits] r35591 - haiku/trunk/src/bin/debug/profile - ingo_weinhold