Skip to content

Commit f70d3fc

Browse files
XuanjinlongXuanjinlong
andauthored
fix(cluster): fix bug double free when can not connect redis (#19)
Co-authored-by: Xuanjinlong <[email protected]>
1 parent 7c83d80 commit f70d3fc

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

cluster/client/client.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ static int priskvClusterMetaServerConnect(priskvClusterMetaServer *metaServer, c
125125
priskv_log_error("Failed to connect to meta server %s:%d, %s\n", addr, port,
126126
metaServer->redisCtx->errstr);
127127
redisFree(metaServer->redisCtx);
128+
metaServer->redisCtx = NULL;
128129
} else {
129130
priskv_log_error("Failed to connect to meta server %s:%d, can't allocate redis context\n",
130131
addr, port);
@@ -136,14 +137,14 @@ static int priskvClusterMetaServerConnect(priskvClusterMetaServer *metaServer, c
136137
metaServer->addr = strdup(addr);
137138
metaServer->port = port;
138139

139-
// 发送 AUTH 命令进行认证
140140
if (password != NULL) {
141141
redisReply *reply = redisCommand(metaServer->redisCtx, "AUTH %s", password);
142142
if (!reply || reply->type == REDIS_REPLY_ERROR) {
143143
priskv_log_error("Failed to authenticate to meta server %s:%d, %s\n", addr, port,
144144
reply ? reply->str : "unknown error");
145145

146146
redisFree(metaServer->redisCtx);
147+
metaServer->redisCtx = NULL;
147148
freeReplyObject(reply);
148149
return -1;
149150
}
@@ -156,7 +157,10 @@ static int priskvClusterMetaServerConnect(priskvClusterMetaServer *metaServer, c
156157

157158
static void priskvClusterMetaServerClose(priskvClusterMetaServer *metaServer)
158159
{
159-
redisFree(metaServer->redisCtx);
160+
if (metaServer->redisCtx) {
161+
redisFree(metaServer->redisCtx);
162+
metaServer->redisCtx = NULL;
163+
}
160164
free(metaServer->addr);
161165
metaServer->addr = NULL;
162166
metaServer->port = 0;

0 commit comments

Comments
 (0)