From 9c65bd8f3dec77d4923bdc42cb31d1bee3c93437 Mon Sep 17 00:00:00 2001 From: John Sully Date: Fri, 16 Oct 2020 06:19:52 +0000 Subject: [PATCH] Avoid locking if we won't run a time event Former-commit-id: 33b05c859afd6665feae43c47d19f7a0a764c36b --- src/ae.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/ae.cpp b/src/ae.cpp index 789a6888b..cb500d7b6 100644 --- a/src/ae.cpp +++ b/src/ae.cpp @@ -589,7 +589,7 @@ static aeTimeEvent *aeSearchNearestTimer(aeEventLoop *eventLoop) /* Process time events */ static int processTimeEvents(aeEventLoop *eventLoop) { - std::unique_lock ulock(g_lock); + std::unique_lock ulock(g_lock, std::defer_lock); int processed = 0; aeTimeEvent *te; long long maxId; @@ -634,8 +634,10 @@ static int processTimeEvents(aeEventLoop *eventLoop) { eventLoop->timeEventHead = te->next; if (te->next) te->next->prev = te->prev; - if (te->finalizerProc) + if (te->finalizerProc) { + if (!ulock.owns_lock()) ulock.lock(); te->finalizerProc(eventLoop, te->clientData); + } zfree(te); te = next; continue; @@ -654,6 +656,7 @@ static int processTimeEvents(aeEventLoop *eventLoop) { if (now_sec > te->when_sec || (now_sec == te->when_sec && now_ms >= te->when_ms)) { + if (!ulock.owns_lock()) ulock.lock(); int retval; id = te->id;