Reviewers: Jakob,

Description:
Plug memory leak in Isolate.


[email protected]
BUG=
TEST=


Please review this at https://chromiumcodereview.appspot.com/10702060/

SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge

Affected files:
  M src/isolate.cc
  M src/v8threads.h
  M src/v8threads.cc


Index: src/isolate.cc
diff --git a/src/isolate.cc b/src/isolate.cc
index 30c60b691e8bade00baf2643b329707ef1936796..4b9770da836bef8a0b953678b0c0a35a29aec8fb 100644
--- a/src/isolate.cc
+++ b/src/isolate.cc
@@ -1382,6 +1382,11 @@ Isolate::ThreadDataTable::ThreadDataTable()
 }


+Isolate::ThreadDataTable::~ThreadDataTable() {
+  delete list_;
+}
+
+
 Isolate::PerIsolateThreadData*
     Isolate::ThreadDataTable::Lookup(Isolate* isolate,
                                      ThreadId thread_id) {
Index: src/v8threads.cc
diff --git a/src/v8threads.cc b/src/v8threads.cc
index fd8d5364011cdee45c196cd58550fa31313cb9d7..2d54c3f8b22a06b5bdaa4617350e79728df9a7fd 100644
--- a/src/v8threads.cc
+++ b/src/v8threads.cc
@@ -244,6 +244,11 @@ ThreadState::ThreadState(ThreadManager* thread_manager)
 }


+ThreadState::~ThreadState() {
+  if (data_ != NULL) DeleteArray<char>(data_);
+}
+
+
 void ThreadState::AllocateSpace() {
   data_ = NewArray<char>(ArchiveSpacePerThread());
 }
@@ -306,8 +311,19 @@ ThreadManager::ThreadManager()

 ThreadManager::~ThreadManager() {
   delete mutex_;
-  delete free_anchor_;
-  delete in_use_anchor_;
+  DeleteThreadStateList(free_anchor_);
+  DeleteThreadStateList(in_use_anchor_);
+}
+
+
+void ThreadManager::DeleteThreadStateList(ThreadState* anchor) {
+  // The list starts and ends with the anchor.
+  for (ThreadState* current = anchor->next_; current != anchor;) {
+    ThreadState* next = current->next_;
+    delete current;
+    current = next;
+  }
+  delete anchor;
 }


Index: src/v8threads.h
diff --git a/src/v8threads.h b/src/v8threads.h
index a2aee4e3383c5519891f3302d9b96afbd94c7cbb..66971b098141ad326d45a0ef1486e541e379170e 100644
--- a/src/v8threads.h
+++ b/src/v8threads.h
@@ -57,6 +57,7 @@ class ThreadState {

  private:
   explicit ThreadState(ThreadManager* thread_manager);
+  ~ThreadState();

   void AllocateSpace();

@@ -114,6 +115,8 @@ class ThreadManager {
   ThreadManager();
   ~ThreadManager();

+  void DeleteThreadStateList(ThreadState* anchor);
+
   void EagerlyArchiveThread();

   Mutex* mutex_;


--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to