summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2012-01-24 09:32:39 +0100
committerantirez <antirez@gmail.com>2012-01-24 09:32:39 +0100
commit06b3dced99371c68fa9d7bcb0523cc05f3324e06 (patch)
tree580b97fcc839a929cb229777745c226244c30361 /src
parent51669c5ac11b250fcdc91382f52f515a11835a20 (diff)
downloadredis-06b3dced99371c68fa9d7bcb0523cc05f3324e06.tar.gz
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.
Diffstat (limited to 'src')
-rw-r--r--src/networking.c12
-rw-r--r--src/redis.h2
2 files changed, 6 insertions, 8 deletions
diff --git a/src/networking.c b/src/networking.c
index b8f338658..949075727 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 dbb56ca3e..43c05b3af 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, ...)