diff options
| author | 2021-03-23 05:51:02 +0000 | |
|---|---|---|
| committer | 2021-03-23 05:51:02 +0000 | |
| commit | 51a36dd9165000a0d00f72519965b8059af83f33 (patch) | |
| tree | 7f5f5d23c854dfc8acfe7ae79de75657c7a3917c | |
| parent | a6926bd12f1c9d952fa4c287e1cfaed3376bae3c (diff) | |
| parent | bb0e037a24bde142386688330b339007dea83f62 (diff) | |
Merge "Fixes dumpstate crashed when shutdown the thread pool" am: 6fe1d3d3bb am: bb0e037a24
Original change: https://android-review.googlesource.com/c/platform/frameworks/native/+/1641960
Change-Id: I79cc42333f9b8cc9d97ddc860fadd64a0ace8120
| -rw-r--r-- | cmds/dumpstate/DumpPool.cpp | 2 | ||||
| -rw-r--r-- | cmds/dumpstate/tests/dumpstate_test.cpp | 21 |
2 files changed, 22 insertions, 1 deletions
diff --git a/cmds/dumpstate/DumpPool.cpp b/cmds/dumpstate/DumpPool.cpp index e15ac3fe82..c2c8a72f52 100644 --- a/cmds/dumpstate/DumpPool.cpp +++ b/cmds/dumpstate/DumpPool.cpp @@ -64,8 +64,8 @@ void DumpPool::shutdown() { if (shutdown_ || threads_.empty()) { return; } - while (!tasks_.empty()) tasks_.pop(); futures_map_.clear(); + while (!tasks_.empty()) tasks_.pop(); shutdown_ = true; condition_variable_.notify_all(); diff --git a/cmds/dumpstate/tests/dumpstate_test.cpp b/cmds/dumpstate/tests/dumpstate_test.cpp index b2518ad9eb..2c573e4f4a 100644 --- a/cmds/dumpstate/tests/dumpstate_test.cpp +++ b/cmds/dumpstate/tests/dumpstate_test.cpp @@ -1762,6 +1762,27 @@ TEST_F(DumpPoolTest, EnqueueTask_withDurationLog) { EXPECT_THAT(getTempFileCounts(kTestDataPath), Eq(0)); } +TEST_F(DumpPoolTest, Shutdown_withoutCrash) { + bool run_1 = false; + auto dump_func_1 = [&]() { + run_1 = true; + }; + auto dump_func = []() { + sleep(1); + }; + + dump_pool_->start(/* thread_counts = */1); + dump_pool_->enqueueTask(/* task_name = */"1", dump_func_1); + dump_pool_->enqueueTask(/* task_name = */"2", dump_func); + dump_pool_->enqueueTask(/* task_name = */"3", dump_func); + dump_pool_->enqueueTask(/* task_name = */"4", dump_func); + dump_pool_->waitForTask("1", "", out_fd_.get()); + dump_pool_->shutdown(); + + EXPECT_TRUE(run_1); + EXPECT_THAT(getTempFileCounts(kTestDataPath), Eq(0)); +} + class TaskQueueTest : public DumpstateBaseTest { public: void SetUp() { |