From c69450ec04fe8ba428a761963408941defc0916c Mon Sep 17 00:00:00 2001 From: Glenn Strauss Date: Sun, 25 Jul 2021 23:12:56 -0400 Subject: [PATCH] [core] free fdwaitqueue list when empty fdwaitqueue is typically unused except in severe overload conditions, so free up the list storage as soon as it is empty --- src/server.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/server.c b/src/server.c index 61f6cdd3..4c791d25 100644 --- a/src/server.c +++ b/src/server.c @@ -1065,8 +1065,14 @@ static void server_process_fdwaitqueue (server *srv) { if (i == fdwaitqueue->used) break; connection_state_machine(fdwaitqueue->ptr[i++]); } - if (i > 0 && 0 != (fdwaitqueue->used -= i)) { - memmove(fdwaitqueue->ptr, fdwaitqueue->ptr+i, fdwaitqueue->used * sizeof(*(fdwaitqueue->ptr))); + if (0 == (fdwaitqueue->used -= i)) { + free(fdwaitqueue->ptr); + fdwaitqueue->ptr = NULL; + fdwaitqueue->size = 0; + } + else if (i > 0) { + memmove(fdwaitqueue->ptr, fdwaitqueue->ptr+i, + fdwaitqueue->used * sizeof(*(fdwaitqueue->ptr))); } }