Skip to content

Commit cee6d30

Browse files
zuiderkwastoranagra
authored andcommitted
Don't crash when adding a forgotten node to blacklist twice (redis#12702)
Add a defensive checks to prevent double freeing a node from the cluster blacklist. (cherry picked from commit 8d67595)
1 parent cf013b8 commit cee6d30

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

src/cluster.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1134,6 +1134,9 @@ void clusterReset(int hard) {
11341134
}
11351135
dictReleaseIterator(di);
11361136

1137+
/* Empty the nodes blacklist. */
1138+
dictEmpty(server.cluster->nodes_black_list, NULL);
1139+
11371140
/* Hard reset only: set epochs to 0, change node ID. */
11381141
if (hard) {
11391142
sds oldname;
@@ -2655,8 +2658,7 @@ void clusterProcessPingExtensions(clusterMsg *hdr, clusterLink *link) {
26552658
clusterNode *n = clusterLookupNode(forgotten_node_ext->name, CLUSTER_NAMELEN);
26562659
if (n && n != myself && !(nodeIsSlave(myself) && myself->slaveof == n)) {
26572660
sds id = sdsnewlen(forgotten_node_ext->name, CLUSTER_NAMELEN);
2658-
dictEntry *de = dictAddRaw(server.cluster->nodes_black_list, id, NULL);
2659-
serverAssert(de != NULL);
2661+
dictEntry *de = dictAddOrFind(server.cluster->nodes_black_list, id);
26602662
uint64_t expire = server.unixtime + ntohu64(forgotten_node_ext->ttl);
26612663
dictSetUnsignedIntegerVal(de, expire);
26622664
clusterDelNode(n);

0 commit comments

Comments
 (0)