diff options
-rw-r--r-- | hiredis.c | 10 | ||||
-rw-r--r-- | hiredis.h | 1 | ||||
-rw-r--r-- | ssl.c | 2 |
3 files changed, 11 insertions, 2 deletions
@@ -48,6 +48,7 @@ extern int redisContextUpdateConnectTimeout(redisContext *c, const struct timeva extern int redisContextUpdateCommandTimeout(redisContext *c, const struct timeval *timeout); static redisContextFuncs redisContextDefaultFuncs = { + .close = redisNetClose, .free_privctx = NULL, .async_read = redisAsyncRead, .async_write = redisAsyncWrite, @@ -729,7 +730,10 @@ static redisContext *redisContextInit(void) { void redisFree(redisContext *c) { if (c == NULL) return; - redisNetClose(c); + + if (c->funcs && c->funcs->close) { + c->funcs->close(c); + } sdsfree(c->obuf); redisReaderFree(c->reader); @@ -766,7 +770,9 @@ int redisReconnect(redisContext *c) { c->privctx = NULL; } - redisNetClose(c); + if (c->funcs && c->funcs->close) { + c->funcs->close(c); + } sdsfree(c->obuf); redisReaderFree(c->reader); @@ -245,6 +245,7 @@ typedef struct { } while(0) typedef struct redisContextFuncs { + void (*close)(struct redisContext *); void (*free_privctx)(void *); void (*async_read)(struct redisAsyncContext *); void (*async_write)(struct redisAsyncContext *); @@ -32,6 +32,7 @@ #include "hiredis.h" #include "async.h" +#include "net.h" #include <assert.h> #include <errno.h> @@ -579,6 +580,7 @@ static void redisSSLAsyncWrite(redisAsyncContext *ac) { } redisContextFuncs redisContextSSLFuncs = { + .close = redisNetClose, .free_privctx = redisSSLFree, .async_read = redisSSLAsyncRead, .async_write = redisSSLAsyncWrite, |