From 9d665825d95aafc72a51eb7dfbbb07719dfeb9a7 Mon Sep 17 00:00:00 2001 From: antirez Date: Fri, 29 Apr 2011 14:18:16 +0200 Subject: Fixed a bug with replication where SLAVEOF NO ONE caused a slave to close the connection with its slaves --- src/networking.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/networking.c b/src/networking.c index 510ed82ac..9c3a231ea 100644 --- a/src/networking.c +++ b/src/networking.c @@ -523,10 +523,16 @@ void freeClient(redisClient *c) { * close the connection with all our slaves if we have any, so * when we'll resync with the master the other slaves will sync again * with us as well. Note that also when the slave is not connected - * to the master it will keep refusing connections by other slaves. */ - while (listLength(server.slaves)) { - ln = listFirst(server.slaves); - freeClient((redisClient*)ln->value); + * to the master it will keep refusing connections by other slaves. + * + * We do this only if server.masterhost != NULL. If it is NULL this + * means the user called SLAVEOF NO ONE and we are freeing our + * link with the master, so no need to close link with slaves. */ + if (server.masterhost != NULL) { + while (listLength(server.slaves)) { + ln = listFirst(server.slaves); + freeClient((redisClient*)ln->value); + } } } /* Release memory */ -- cgit v1.2.1