summaryrefslogtreecommitdiff
path: root/src/server.c
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2020-05-14 10:02:57 +0200
committerantirez <antirez@gmail.com>2020-05-14 10:06:27 +0200
commitbc4667acbcbeced700d0f64735e8ba8c7ffb8357 (patch)
treebc44a8e73a1c2c48a95f84455a2d3a98a9bbfabb /src/server.c
parent27e25e9d1ed1b0ba3f639eb64c8f27b852753045 (diff)
downloadredis-bc4667acbcbeced700d0f64735e8ba8c7ffb8357.tar.gz
Track events processed while blocked globally.free_clients_during_loading
Related to #7234.
Diffstat (limited to 'src/server.c')
-rw-r--r--src/server.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/server.c b/src/server.c
index 380a6d5b6..1bed3959d 100644
--- a/src/server.c
+++ b/src/server.c
@@ -2101,12 +2101,17 @@ void beforeSleep(struct aeEventLoop *eventLoop) {
UNUSED(eventLoop);
/* Just call a subset of vital functions in case we are re-entering
- * the event loop from processEventsWhileBlocked(). */
+ * the event loop from processEventsWhileBlocked(). Note that in this
+ * case we keep track of the number of events we are processing, since
+ * processEventsWhileBlocked() wants to stop ASAP if there are no longer
+ * events to handle. */
if (ProcessingEventsWhileBlocked) {
- handleClientsWithPendingReadsUsingThreads();
- tlsProcessPendingData();
- handleClientsWithPendingWrites();
- freeClientsInAsyncFreeQueue();
+ uint64_t processed = 0;
+ processed += handleClientsWithPendingReadsUsingThreads();
+ processed += tlsProcessPendingData();
+ processed += handleClientsWithPendingWrites();
+ processed += freeClientsInAsyncFreeQueue();
+ server.events_processed_while_blocked += processed;
return;
}
@@ -2757,6 +2762,7 @@ void initServer(void) {
server.clients_waiting_acks = listCreate();
server.get_ack_from_slaves = 0;
server.clients_paused = 0;
+ server.events_processed_while_blocked = 0;
server.system_memory_size = zmalloc_get_memory_size();
if (server.tls_port && tlsConfigure(&server.tls_ctx_config) == C_ERR) {