Reviewers: jochen,

Message:
PTAL

Description:
Fix memory-leak in default platform implementation of delayed tasks.

BUG=

Please review this at https://codereview.chromium.org/1221083004/

Base URL: https://chromium.googlesource.com/v8/v8.git@master

Affected files (+26, -5 lines):
  M src/libplatform/default-platform.cc
  M test/unittests/libplatform/default-platform-unittest.cc


Index: src/libplatform/default-platform.cc
diff --git a/src/libplatform/default-platform.cc b/src/libplatform/default-platform.cc index 2885d55de7066c19546cee6a82587ffa3b050ad9..2e13cc09042a896a62aec3525890f8d72a22eb3d 100644
--- a/src/libplatform/default-platform.cc
+++ b/src/libplatform/default-platform.cc
@@ -41,19 +41,24 @@ DefaultPlatform::~DefaultPlatform() {
   base::LockGuard<base::Mutex> guard(&lock_);
   queue_.Terminate();
   if (initialized_) {
-    for (std::vector<WorkerThread*>::iterator i = thread_pool_.begin();
-         i != thread_pool_.end(); ++i) {
+    for (auto i = thread_pool_.begin(); i != thread_pool_.end(); ++i) {
       delete *i;
     }
   }
-  for (std::map<v8::Isolate*, std::queue<Task*> >::iterator i =
-           main_thread_queue_.begin();
-       i != main_thread_queue_.end(); ++i) {
+  for (auto i = main_thread_queue_.begin(); i != main_thread_queue_.end();
+       ++i) {
     while (!i->second.empty()) {
       delete i->second.front();
       i->second.pop();
     }
   }
+  for (auto i = main_thread_delayed_queue_.begin();
+       i != main_thread_delayed_queue_.end(); ++i) {
+    while (!i->second.empty()) {
+      delete i->second.top().second;
+      i->second.pop();
+    }
+  }
 }


Index: test/unittests/libplatform/default-platform-unittest.cc
diff --git a/test/unittests/libplatform/default-platform-unittest.cc b/test/unittests/libplatform/default-platform-unittest.cc index ffa3199444eb4457017921bf9e622bf0a1c8ce70..814b27bc518e5a147e0291e605ccae416539c4c5 100644
--- a/test/unittests/libplatform/default-platform-unittest.cc
+++ b/test/unittests/libplatform/default-platform-unittest.cc
@@ -111,5 +111,21 @@ TEST(DefaultPlatformTest, PumpMessageLoopNoStarvation) {
   EXPECT_TRUE(platform.PumpMessageLoop(isolate));
 }

+
+TEST(DefaultPlatformTest, PendingDelayedTasksAreDestroyedOnShutdown) {
+  InSequence s;
+
+  int dummy;
+  Isolate* isolate = reinterpret_cast<Isolate*>(&dummy);
+
+  {
+    DefaultPlatformWithMockTime platform;
+    StrictMock<MockTask>* task = new StrictMock<MockTask>;
+    platform.CallDelayedOnForegroundThread(isolate, task, 10);
+    EXPECT_CALL(*task, Die());
+  }
+}
+
+
 }  // namespace platform
 }  // namespace v8


--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to