diff options
author | Pavlo Yatsukhnenko <yatsukhnenko@gmail.com> | 2018-05-31 11:02:39 +0300 |
---|---|---|
committer | Pavlo Yatsukhnenko <yatsukhnenko@gmail.com> | 2018-05-31 11:24:28 +0300 |
commit | 28ec432247f597216846593d62b21e2eef8461c5 (patch) | |
tree | 01dd9f4b15bae3339de21d5ce8158be5a44d9afa /cluster_library.c | |
parent | 97bb6bd85e3fa38dbb13b97c50bd315490265a80 (diff) |
Issue #1358
Use `cluster_free` in `free_cluster_context` to free cluster object.
Call `cluster_disconnect` before destroying cluster object.
Diffstat (limited to 'cluster_library.c')
-rw-r--r-- | cluster_library.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/cluster_library.c b/cluster_library.c index 09d71602..305db2ab 100644 --- a/cluster_library.c +++ b/cluster_library.c @@ -831,9 +831,14 @@ PHP_REDIS_API redisCluster *cluster_create(double timeout, double read_timeout, return c; } -PHP_REDIS_API void cluster_free(redisCluster *c) { +PHP_REDIS_API void +cluster_free(redisCluster *c, int free_ctx TSRMLS_DC) +{ + /* Disconnect from each node we're connected to */ + cluster_disconnect(c TSRMLS_CC); + /* Free any allocated prefix */ - if (c->flags->prefix) efree(c->flags->prefix); + if (c->flags->prefix) zend_string_release(c->flags->prefix); efree(c->flags); /* Call hash table destructors */ @@ -848,7 +853,7 @@ PHP_REDIS_API void cluster_free(redisCluster *c) { if (c->err) zend_string_release(c->err); /* Free structure itself */ - efree(c); + if (free_ctx) efree(c); } /* Takes our input hash table and returns a straigt C array with elements, @@ -1069,7 +1074,7 @@ PHP_REDIS_API void cluster_disconnect(redisCluster *c TSRMLS_DC) { redisClusterNode *node; ZEND_HASH_FOREACH_PTR(c->nodes, node) { - if (node == NULL) break; + if (node == NULL) continue; redis_sock_disconnect(node->sock TSRMLS_CC); node->sock->lazy_connect = 1; } ZEND_HASH_FOREACH_END(); |