Merge branch 'unstable' of github.com:/antirez/redis into unstable
This commit is contained in:
commit
bce9a68b39
@ -3040,16 +3040,22 @@ int handleClientsWithPendingReadsUsingThreads(void) {
|
|||||||
if (tio_debug) printf("I/O READ All threads finshed\n");
|
if (tio_debug) printf("I/O READ All threads finshed\n");
|
||||||
|
|
||||||
/* Run the list of clients again to process the new buffers. */
|
/* Run the list of clients again to process the new buffers. */
|
||||||
listRewind(server.clients_pending_read,&li);
|
while(listLength(server.clients_pending_read)) {
|
||||||
while((ln = listNext(&li))) {
|
ln = listFirst(server.clients_pending_read);
|
||||||
client *c = listNodeValue(ln);
|
client *c = listNodeValue(ln);
|
||||||
c->flags &= ~CLIENT_PENDING_READ;
|
c->flags &= ~CLIENT_PENDING_READ;
|
||||||
|
listDelNode(server.clients_pending_read,ln);
|
||||||
|
|
||||||
if (c->flags & CLIENT_PENDING_COMMAND) {
|
if (c->flags & CLIENT_PENDING_COMMAND) {
|
||||||
c->flags &= ~ CLIENT_PENDING_COMMAND;
|
c->flags &= ~CLIENT_PENDING_COMMAND;
|
||||||
processCommandAndResetClient(c);
|
if (processCommandAndResetClient(c) == C_ERR) {
|
||||||
|
/* If the client is no longer valid, we avoid
|
||||||
|
* processing the client later. So we just go
|
||||||
|
* to the next. */
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
processInputBufferAndReplicate(c);
|
processInputBufferAndReplicate(c);
|
||||||
}
|
}
|
||||||
listEmpty(server.clients_pending_read);
|
|
||||||
return processed;
|
return processed;
|
||||||
}
|
}
|
||||||
|
@ -2088,6 +2088,9 @@ int serverCron(struct aeEventLoop *eventLoop, long long id, void *clientData) {
|
|||||||
void beforeSleep(struct aeEventLoop *eventLoop) {
|
void beforeSleep(struct aeEventLoop *eventLoop) {
|
||||||
UNUSED(eventLoop);
|
UNUSED(eventLoop);
|
||||||
|
|
||||||
|
/* We should handle pending reads clients ASAP after event loop. */
|
||||||
|
handleClientsWithPendingReadsUsingThreads();
|
||||||
|
|
||||||
/* Handle TLS pending data. (must be done before flushAppendOnlyFile) */
|
/* Handle TLS pending data. (must be done before flushAppendOnlyFile) */
|
||||||
tlsProcessPendingData();
|
tlsProcessPendingData();
|
||||||
/* If tls still has pending unread data don't sleep at all. */
|
/* If tls still has pending unread data don't sleep at all. */
|
||||||
@ -2157,7 +2160,6 @@ void beforeSleep(struct aeEventLoop *eventLoop) {
|
|||||||
void afterSleep(struct aeEventLoop *eventLoop) {
|
void afterSleep(struct aeEventLoop *eventLoop) {
|
||||||
UNUSED(eventLoop);
|
UNUSED(eventLoop);
|
||||||
if (moduleCount()) moduleAcquireGIL();
|
if (moduleCount()) moduleAcquireGIL();
|
||||||
handleClientsWithPendingReadsUsingThreads();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* =========================== Server initialization ======================== */
|
/* =========================== Server initialization ======================== */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user