From e6a82692b7be9d62a619f9968e0f9ae5f90ca71e Mon Sep 17 00:00:00 2001 From: John Sully Date: Fri, 25 Jun 2021 02:31:17 +0000 Subject: [PATCH] Avoid holding the lockPendingWrite for too long and deadlocking due to lock inversion Former-commit-id: a4b49fbec60e2333a4407d24383ae204d5d2b413 --- src/networking.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/networking.cpp b/src/networking.cpp index 690b03a51..5ced371d1 100644 --- a/src/networking.cpp +++ b/src/networking.cpp @@ -2018,7 +2018,6 @@ void ProcessPendingAsyncWrites() * need to use a syscall in order to install the writable event handler, * get it called, and so forth. */ int handleClientsWithPendingWrites(int iel, int aof_state) { - std::unique_lock lockf(g_pserver->rgthreadvar[iel].lockPendingWrite); int processed = 0; serverAssert(iel == (serverTL - g_pserver->rgthreadvar)); @@ -2041,7 +2040,9 @@ int handleClientsWithPendingWrites(int iel, int aof_state) { ae_flags |= AE_BARRIER; } + std::unique_lock lockf(g_pserver->rgthreadvar[iel].lockPendingWrite); auto vec = std::move(g_pserver->rgthreadvar[iel].clients_pending_write); + lockf.unlock(); processed += (int)vec.size(); for (client *c : vec) {