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