From 06b3dced99371c68fa9d7bcb0523cc05f3324e06 Mon Sep 17 00:00:00 2001 From: antirez Date: Tue, 24 Jan 2012 09:32:39 +0100 Subject: [PATCH] asyncCloseClientOnOutputBufferLimitReached() now ignores clients with REDIS_CLOSE_ASAP flag already set. Return value of the function changed from int to void since it is not used. Fixed logging of the client scheduled to be closed. --- src/networking.c | 12 +++++------- src/redis.h | 2 +- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/networking.c b/src/networking.c index b8f33865..94907572 100644 --- a/src/networking.c +++ b/src/networking.c @@ -1266,21 +1266,19 @@ int checkClientOutputBufferLimits(redisClient *c) { } /* Asynchronously close a client if soft or hard limit is reached on the - * output buffer size. If the client will be closed 1 is returend, otherwise 0 - * is returned. + * output buffer size. The caller can check if the client will be closed + * checking if the client REDIS_CLOSE_ASAP flag is set. * * Note: we need to close the client asynchronously because this function is * called from contexts where the client can't be freed safely, i.e. from the * lower level functions pushing data inside the client output buffers. */ -int asyncCloseClientOnOutputBufferLimitReached(redisClient *c) { +void asyncCloseClientOnOutputBufferLimitReached(redisClient *c) { + if (c->flags & REDIS_CLOSE_ASAP) return; if (checkClientOutputBufferLimits(c)) { sds client = getClientInfoString(c); freeClientAsync(c); - redisLog(REDIS_NOTICE,"Client %s scheduled to be closed ASAP for overcoming of output buffer limits."); + redisLog(REDIS_NOTICE,"Client %s scheduled to be closed ASAP for overcoming of output buffer limits.", client); sdsfree(client); - return 1; - } else { - return 0; } } diff --git a/src/redis.h b/src/redis.h index dbb56ca3..43c05b3a 100644 --- a/src/redis.h +++ b/src/redis.h @@ -804,7 +804,7 @@ void rewriteClientCommandVector(redisClient *c, int argc, ...); void rewriteClientCommandArgument(redisClient *c, int i, robj *newval); unsigned long getClientOutputBufferMemoryUsage(redisClient *c); void freeClientsInAsyncFreeQueue(void); -int asyncCloseClientOnOutputBufferLimitReached(redisClient *c); +void asyncCloseClientOnOutputBufferLimitReached(redisClient *c); #ifdef __GNUC__ void addReplyErrorFormat(redisClient *c, const char *fmt, ...) -- GitLab