Merge pull request #4497 from soloestoy/optimize-unlink-client

networking: optimize unlinkClient() in freeClient()
This commit is contained in:
Salvatore Sanfilippo 2017-12-05 15:51:15 +01:00 committed by GitHub
commit 03cfc8bf3a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 12 additions and 4 deletions

View File

@ -136,7 +136,12 @@ client *createClient(int fd) {
c->peerid = NULL;
listSetFreeMethod(c->pubsub_patterns,decrRefCountVoid);
listSetMatchMethod(c->pubsub_patterns,listMatchObjects);
if (fd != -1) listAddNodeTail(server.clients,c);
if (fd != -1) {
listAddNodeTail(server.clients,c);
c->client_list_node = listLast(server.clients);
} else {
c->client_list_node = NULL;
}
initClientMultiState(c);
return c;
}
@ -744,9 +749,10 @@ void unlinkClient(client *c) {
* fd is already set to -1. */
if (c->fd != -1) {
/* Remove from the list of active clients. */
ln = listSearchKey(server.clients,c);
serverAssert(ln != NULL);
listDelNode(server.clients,ln);
if (c->client_list_node) {
listDelNode(server.clients,c->client_list_node);
c->client_list_node = NULL;
}
/* Unregister async I/O handlers and close the socket. */
aeDeleteFileEvent(server.el,c->fd,AE_READABLE);

View File

@ -2206,6 +2206,7 @@ void replicationResurrectCachedMaster(int newfd) {
/* Re-add to the list of clients. */
listAddNodeTail(server.clients,server.master);
server.master->client_list_node = listLast(server.clients);
if (aeCreateFileEvent(server.el, newfd, AE_READABLE,
readQueryFromClient, server.master)) {
serverLog(LL_WARNING,"Error resurrecting the cached master, impossible to add the readable handler: %s", strerror(errno));

View File

@ -733,6 +733,7 @@ typedef struct client {
dict *pubsub_channels; /* channels a client is interested in (SUBSCRIBE) */
list *pubsub_patterns; /* patterns a client is interested in (SUBSCRIBE) */
sds peerid; /* Cached peer ID. */
listNode *client_list_node; /* list node in client list */
/* Response buffer */
int bufpos;