mirror of
https://github.com/google/leveldb.git
synced 2026-08-18 10:33:27 +08:00
Fix TEST_CompactMemTable deadlock
This CL ensures that CompactRange doesn't get stuck on waiting on background_work_finished_signal_ during shutdown. While background_work_finished_signal_ may be in fact signaled, CompactMemTable() will never run, not giving opportunity for workers blocked in TEST_CompactMemTable to exit the loop. We suspect this contributes to b/370844779; while the hang was mitigated by limiting concurrency to 1 worker (which avoids filling the thread pool with blocked workers), this issue can still happen and will block 1 worker during shutdown. PiperOrigin-RevId: 879794057
This commit is contained in:
committed by
Victor Costan
parent
78a352f47e
commit
4a0c572440
@@ -646,7 +646,8 @@ Status DBImpl::TEST_CompactMemTable() {
|
||||
if (s.ok()) {
|
||||
// Wait until the compaction completes
|
||||
MutexLock l(&mutex_);
|
||||
while (imm_ != nullptr && bg_error_.ok()) {
|
||||
while (imm_ != nullptr && bg_error_.ok() &&
|
||||
!shutting_down_.load(std::memory_order_acquire)) {
|
||||
background_work_finished_signal_.Wait();
|
||||
}
|
||||
if (imm_ != nullptr) {
|
||||
|
||||
Reference in New Issue
Block a user