From 2a6dbdd2252a038546f1c911957644df2a7d4fba Mon Sep 17 00:00:00 2001 From: Jan-Erik Rediger Date: Tue, 9 Dec 2014 00:45:56 +0100 Subject: Free string if it is unused If the string is already in the dict, we need to free this. Original fix by @tt33415366. Fixes #256 Closes #286 --- async.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/async.c b/async.c index f7f343b..3aace8f 100644 --- a/async.c +++ b/async.c @@ -575,6 +575,7 @@ static int __redisAsyncCommand(redisAsyncContext *ac, redisCallbackFn *fn, void size_t clen, alen; char *p; sds sname; + int ret; /* Don't accept new commands when the connection is about to be closed. */ if (c->flags & (REDIS_DISCONNECTING | REDIS_FREEING)) return REDIS_ERR; @@ -598,9 +599,11 @@ static int __redisAsyncCommand(redisAsyncContext *ac, redisCallbackFn *fn, void while ((p = nextArgument(p,&astr,&alen)) != NULL) { sname = sdsnewlen(astr,alen); if (pvariant) - dictReplace(ac->sub.patterns,sname,&cb); + ret = dictReplace(ac->sub.patterns,sname,&cb); else - dictReplace(ac->sub.channels,sname,&cb); + ret = dictReplace(ac->sub.channels,sname,&cb); + + if (ret == 0) sdsfree(sname); } } else if (strncasecmp(cstr,"unsubscribe\r\n",13) == 0) { /* It is only useful to call (P)UNSUBSCRIBE when the context is -- cgit v1.2.3