From 888dd5db18c7a81f57f4e3e9d69a2a82f67fef5d Mon Sep 17 00:00:00 2001 From: Stepan Usatiuk Date: Fri, 5 Jan 2024 23:08:28 +0100 Subject: [PATCH] possible hang fix --- src/vm/src/MemoryContext.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/vm/src/MemoryContext.cpp b/src/vm/src/MemoryContext.cpp index 057d77d..5e4bb5f 100644 --- a/src/vm/src/MemoryContext.cpp +++ b/src/vm/src/MemoryContext.cpp @@ -23,7 +23,10 @@ MemoryContext::~MemoryContext() { assert(cell_count() == 0); _gc_thread_stop = true; - _gc_request_cv.notify_all(); + { + std::lock_guard l(_gc_request_m); + _gc_request_cv.notify_all(); + } _gc_thread.join(); } @@ -55,10 +58,10 @@ void MemoryContext::remove_root(Cell *c) { } void MemoryContext::gc_thread_entry() { - while (true) { + while (!_gc_thread_stop) { { std::unique_lock l(_gc_request_m); - _gc_request_cv.wait(l, [&] { return _gc_request || _gc_thread_stop; }); + _gc_request_cv.wait_for(l, std::chrono::seconds(1), [&] { return _gc_request || _gc_thread_stop; }); } if (_gc_thread_stop) return;