From: antirez Date: Thu, 16 Sep 2010 10:02:18 +0000 (+0200) Subject: Merge remote branch 'pietern/networking-perf' X-Git-Url: https://git.saurik.com/redis.git/commitdiff_plain/83f39c7ab26e7f7cfa5fb59ca51b768e9ac0facb?ds=sidebyside;hp=-c Merge remote branch 'pietern/networking-perf' --- 83f39c7ab26e7f7cfa5fb59ca51b768e9ac0facb diff --combined src/networking.c index 96ce5a99,26a6a4c0..aefbc2d7 --- a/src/networking.c +++ b/src/networking.c @@@ -11,24 -11,12 +11,20 @@@ int listMatchObjects(void *a, void *b) } redisClient *createClient(int fd) { - redisClient *c; - - /* Allocate more space to hold a static write buffer. */ - c = zmalloc(sizeof(redisClient)+REDIS_REPLY_CHUNK_BYTES); - c->buflen = REDIS_REPLY_CHUNK_BYTES; + redisClient *c = zmalloc(sizeof(redisClient)); c->bufpos = 0; 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(); @@@ -55,6 -43,11 +51,6 @@@ 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; @@@ -87,7 -80,7 +83,7 @@@ robj *dupLastObjectIfNeeded(list *reply } int _addReplyToBuffer(redisClient *c, char *s, size_t len) { - size_t available = c->buflen-c->bufpos; + size_t available = sizeof(c->buf)-c->bufpos; /* If there already are entries in the reply list, we cannot * add anything more to the static buffer. */