From ce8705451a44626b0d73ed8602aed27b1b0a41ae Mon Sep 17 00:00:00 2001 From: christianEQ Date: Wed, 24 Mar 2021 20:44:40 +0000 Subject: [PATCH] serverAsserts on sleeping_threads, remove bare locks Former-commit-id: 8c64ca2333d8eb2ee92d835907474ec63e127b62 --- src/server.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/server.cpp b/src/server.cpp index 7827879a5..26bf59b79 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -2514,9 +2514,11 @@ void beforeSleep(struct aeEventLoop *eventLoop) { serverAssert(g_pserver->repl_batch_offStart < 0); runAndPropogateToReplicas(processClients); - time_thread_mutex.lock(); - sleeping_threads++; - time_thread_mutex.unlock(); + { + std::lock_guard lock(time_thread_mutex); + sleeping_threads++; + serverAssert(sleeping_threads <= cserver.cthreads); + } /* Handle precise timeouts of blocked clients. */ handleBlockedClientsTimeout(); @@ -6088,9 +6090,9 @@ void OnTerminate() } void wakeTimeThread() { - time_thread_mutex.lock(); + std::lock_guard lock(time_thread_mutex); sleeping_threads--; - time_thread_mutex.unlock(); + serverAssert(sleeping_threads >= 0); time_thread_cv.notify_one(); } @@ -6099,9 +6101,11 @@ void *timeThreadMain(void*) { delay.tv_sec = 0; delay.tv_nsec = 100; while (true) { - std::unique_lock lock(time_thread_mutex); - if (sleeping_threads >= cserver.cthreads) { - time_thread_cv.wait(lock); + { + std::unique_lock lock(time_thread_mutex); + if (sleeping_threads >= cserver.cthreads) { + time_thread_cv.wait(lock); + } } updateCachedTime(); clock_nanosleep(CLOCK_REALTIME, 0, &delay, NULL);