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
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);