summaryrefslogtreecommitdiff
path: root/src/networking.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/networking.c')
-rw-r--r--src/networking.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/networking.c b/src/networking.c
index f0bdacfae..b1235ed41 100644
--- a/src/networking.c
+++ b/src/networking.c
@@ -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);