From 5e78edb350c8060fa478182efc4e4aa729bbe154 Mon Sep 17 00:00:00 2001 From: Pieter Noordhuis Date: Thu, 28 Oct 2010 15:07:45 +0100 Subject: [PATCH 1/1] Unify two client flags that mean the same --- src/networking.c | 8 ++++---- src/redis.c | 4 ++-- src/redis.h | 4 +--- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/networking.c b/src/networking.c index 46d49bf6..94953715 100644 --- a/src/networking.c +++ b/src/networking.c @@ -541,7 +541,6 @@ void sendReplyToClient(aeEventLoop *el, int fd, void *privdata, int mask) { aeDeleteFileEvent(server.el,c->fd,AE_WRITABLE); /* Close connection after entire reply has been sent. */ - if (c->flags & REDIS_QUIT) freeClient(c); if (c->flags & REDIS_CLOSE_AFTER_REPLY) freeClient(c); } } @@ -802,9 +801,10 @@ void processInputBuffer(redisClient *c) { * will try to reiterate. The following line will make it return asap. */ if (c->flags & REDIS_BLOCKED || c->flags & REDIS_IO_WAIT) return; - /* Never continue to process the input buffer after QUIT. After the output - * buffer is flushed (with the OK), the connection will be dropped. */ - if (c->flags & REDIS_QUIT) return; + /* REDIS_CLOSE_AFTER_REPLY closes the connection once the reply is + * written to the client. Make sure to not let the reply grow after + * this flag has been set (i.e. don't process more commands). */ + if (c->flags & REDIS_CLOSE_AFTER_REPLY) return; /* Determine request type when unknown. */ if (!c->reqtype) { diff --git a/src/redis.c b/src/redis.c index 62a54b84..5c519823 100644 --- a/src/redis.c +++ b/src/redis.c @@ -893,10 +893,10 @@ int processCommand(redisClient *c) { * go through checking for replication and QUIT will cause trouble * when FORCE_REPLICATION is enabled and would be implemented in * a regular command proc. */ - redisAssert(!(c->flags & REDIS_QUIT)); + redisAssert(!(c->flags & REDIS_CLOSE_AFTER_REPLY)); if (!strcasecmp(c->argv[0]->ptr,"quit")) { - c->flags |= REDIS_QUIT; addReply(c,shared.ok); + c->flags |= REDIS_CLOSE_AFTER_REPLY; return REDIS_ERR; } diff --git a/src/redis.h b/src/redis.h index 1e841b73..44857569 100644 --- a/src/redis.h +++ b/src/redis.h @@ -144,9 +144,7 @@ #define REDIS_BLOCKED 16 /* The client is waiting in a blocking operation */ #define REDIS_IO_WAIT 32 /* The client is waiting for Virtual Memory I/O */ #define REDIS_DIRTY_CAS 64 /* Watched keys modified. EXEC will fail. */ -#define REDIS_QUIT 128 /* Client will be disconnected after reply is sent */ -#define REDIS_CLOSE_AFTER_REPLY 256 /* Close connection immediately once the - * reply has been sent. */ +#define REDIS_CLOSE_AFTER_REPLY 128 /* Close after writing entire reply. */ /* Client request types */ #define REDIS_REQ_INLINE 1 -- 2.45.2