diff --git a/src/blocked.cpp b/src/blocked.cpp index 13cc2347f..e62617a72 100644 --- a/src/blocked.cpp +++ b/src/blocked.cpp @@ -111,6 +111,8 @@ void blockClient(client *c, int btype) { serverAssert(GlobalLocksAcquired()); c->flags |= CLIENT_BLOCKED; c->btype = btype; + if (btype == BLOCKED_ASYNC) + c->casyncOpsPending++; g_pserver->blocked_clients++; g_pserver->blocked_clients_by_type[btype]++; } @@ -191,7 +193,8 @@ void unblockClient(client *c) { } else if (c->btype == BLOCKED_MODULE) { unblockClientFromModule(c); } else if (c->btype == BLOCKED_ASYNC) { - + serverAssert(c->casyncOpsPending > 0); + c->casyncOpsPending--; } else { serverPanic("Unknown btype in unblockClient()."); } diff --git a/src/networking.cpp b/src/networking.cpp index ad66b839d..8ce3387b8 100644 --- a/src/networking.cpp +++ b/src/networking.cpp @@ -1624,7 +1624,7 @@ void ProcessPendingAsyncWrites() std::atomic_thread_fence(std::memory_order_seq_cst); - if (c->casyncOpsPending == 0) + if (c->casyncOpsPending == 0 || c->btype == BLOCKED_ASYNC) // It's ok to send data if we're in a bgthread op { if (FCorrectThread(c)) {