]> git.saurik.com Git - redis.git/commitdiff
sdsIncrLen() / sdsMakeRoomFor() used to avoid copying to intermediate buffer while...
authorantirez <antirez@gmail.com>
Wed, 2 Nov 2011 15:52:45 +0000 (16:52 +0100)
committerantirez <antirez@gmail.com>
Wed, 2 Nov 2011 15:52:45 +0000 (16:52 +0100)
src/networking.c

index 862e69f4c03fa2f1cbb4f38fb0b4835e87a81b95..f6139f57fa69b09bc1f4222cc87a7559effbbf5e 100644 (file)
@@ -833,12 +833,14 @@ void processInputBuffer(redisClient *c) {
 
 void readQueryFromClient(aeEventLoop *el, int fd, void *privdata, int mask) {
     redisClient *c = (redisClient*) privdata;
 
 void readQueryFromClient(aeEventLoop *el, int fd, void *privdata, int mask) {
     redisClient *c = (redisClient*) privdata;
-    char buf[REDIS_IOBUF_LEN];
     int nread;
     int nread;
+    size_t qblen;
     REDIS_NOTUSED(el);
     REDIS_NOTUSED(mask);
 
     REDIS_NOTUSED(el);
     REDIS_NOTUSED(mask);
 
-    nread = read(fd, buf, REDIS_IOBUF_LEN);
+    qblen = sdslen(c->querybuf);
+    c->querybuf = sdsMakeRoomFor(c->querybuf, REDIS_IOBUF_LEN);
+    nread = read(fd, c->querybuf+qblen, REDIS_IOBUF_LEN);
     if (nread == -1) {
         if (errno == EAGAIN) {
             nread = 0;
     if (nread == -1) {
         if (errno == EAGAIN) {
             nread = 0;
@@ -853,7 +855,7 @@ void readQueryFromClient(aeEventLoop *el, int fd, void *privdata, int mask) {
         return;
     }
     if (nread) {
         return;
     }
     if (nread) {
-        c->querybuf = sdscatlen(c->querybuf,buf,nread);
+        sdsIncrLen(c->querybuf,nread);
         c->lastinteraction = time(NULL);
     } else {
         return;
         c->lastinteraction = time(NULL);
     } else {
         return;