Merge "Fixes dumpstate crashed when shutdown the thread pool"

This commit is contained in:
Treehugger Robot 2021-03-23 04:46:39 +00:00 committed by Gerrit Code Review
commit 6fe1d3d3bb
2 changed files with 22 additions and 1 deletions

View file

@ -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();

View file

@ -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() {