diff --git a/src/shell/main.cpp b/src/shell/main.cpp index 81c06d387..ce8083cc2 100644 --- a/src/shell/main.cpp +++ b/src/shell/main.cpp @@ -398,6 +398,7 @@ int STD_CALL main(int argc, char ** argv) { default: UNREACHABLE(); } + disable_timeout(); memory::finalize(); #ifdef _WINDOWS _CrtDumpMemoryLeaks(); diff --git a/src/util/scoped_timer.cpp b/src/util/scoped_timer.cpp index 2164a85d9..44bf30f4c 100644 --- a/src/util/scoped_timer.cpp +++ b/src/util/scoped_timer.cpp @@ -20,6 +20,7 @@ Revision History: --*/ #include "util/scoped_timer.h" +#include "util/mutex.h" #include "util/util.h" #include #include @@ -27,10 +28,6 @@ Revision History: #include #include #include -#include - - - struct scoped_timer_state { std::thread * m_thread { nullptr }; @@ -43,7 +40,7 @@ struct scoped_timer_state { static std::vector available_workers; static std::mutex workers; -static std::atomic num_workers(0); +static atomic num_workers(0); static void thread_func(scoped_timer_state *s) { workers.lock(); @@ -121,8 +118,7 @@ scoped_timer::~scoped_timer() { void scoped_timer::finalize() { unsigned deleted = 0; - unsigned tries = 0; - while (deleted < num_workers && tries < 10) { + while (deleted < num_workers) { workers.lock(); for (auto w : available_workers) { w->work = 2; @@ -138,6 +134,5 @@ void scoped_timer::finalize() { delete w->m_thread; delete w; } - ++tries; } } diff --git a/src/util/timeout.cpp b/src/util/timeout.cpp index e4f6eee39..c030c2ec6 100644 --- a/src/util/timeout.cpp +++ b/src/util/timeout.cpp @@ -47,10 +47,13 @@ static g_timeout_eh eh; void set_timeout(long ms) { SASSERT(!g_timeout); - // this is leaked, but since it's only used in the shell, it's ok g_timeout = new scoped_timer(ms, &eh); } +void disable_timeout() { + delete g_timeout; +} + void register_on_timeout_proc(void (*proc)()) { g_on_timeout = proc; } diff --git a/src/util/timeout.h b/src/util/timeout.h index b21778340..26101caea 100644 --- a/src/util/timeout.h +++ b/src/util/timeout.h @@ -21,4 +21,5 @@ Revision History: void register_on_timeout_proc(void (*proc)()); void set_timeout(long ms); +void disable_timeout();