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.