From 106bd87a3ca7b90e1e6fb764398bbefccee3e4fa Mon Sep 17 00:00:00 2001 From: Pieter Noordhuis Date: Mon, 6 Sep 2010 11:27:22 +0200 Subject: [PATCH] Fix bug where the client is not present in server.clients when free'ing it When creating the readable event results in an error (this happens when the server hits OS limits), the client was not added to the list of clients when freeClient was called. This results in an assertion error. It is better to check this condition first and free the client immediately when this condition occurs. Port of 00a90feb. --- src/networking.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/networking.c b/src/networking.c index a39be7c4..104444f0 100644 --- a/src/networking.c +++ b/src/networking.c @@ -17,6 +17,14 @@ redisClient *createClient(int fd) { anetNonBlock(NULL,fd); anetTcpNoDelay(NULL,fd); if (!c) return NULL; + if (aeCreateFileEvent(server.el,fd,AE_READABLE, + readQueryFromClient, c) == AE_ERR) + { + close(fd); + zfree(c); + return NULL; + } + selectDb(c,0); c->fd = fd; c->querybuf = sdsempty(); @@ -43,11 +51,6 @@ redisClient *createClient(int fd) { c->pubsub_patterns = listCreate(); listSetFreeMethod(c->pubsub_patterns,decrRefCount); listSetMatchMethod(c->pubsub_patterns,listMatchObjects); - if (aeCreateFileEvent(server.el, c->fd, AE_READABLE, - readQueryFromClient, c) == AE_ERR) { - freeClient(c); - return NULL; - } listAddNodeTail(server.clients,c); initClientMultiState(c); return c; -- GitLab