提交 b8d743e1 编写于 作者: A antirez

sdsIncrLen() / sdsMakeRoomFor() used to avoid copying to intermediate buffer...

sdsIncrLen() / sdsMakeRoomFor() used to avoid copying to intermediate buffer while reading the client query.
上级 a54806ac
......@@ -833,12 +833,14 @@ void processInputBuffer(redisClient *c) {
void readQueryFromClient(aeEventLoop *el, int fd, void *privdata, int mask) {
redisClient *c = (redisClient*) privdata;
char buf[REDIS_IOBUF_LEN];
int nread;
size_t qblen;
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;
......@@ -853,7 +855,7 @@ void readQueryFromClient(aeEventLoop *el, int fd, void *privdata, int mask) {
return;
}
if (nread) {
c->querybuf = sdscatlen(c->querybuf,buf,nread);
sdsIncrLen(c->querybuf,nread);
c->lastinteraction = time(NULL);
} else {
return;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册