Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/phpredis/phpredis.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavlo Yatsukhnenko <yatsukhnenko@gmail.com>2018-05-31 11:02:39 +0300
committerPavlo Yatsukhnenko <yatsukhnenko@gmail.com>2018-05-31 11:24:28 +0300
commit28ec432247f597216846593d62b21e2eef8461c5 (patch)
tree01dd9f4b15bae3339de21d5ce8158be5a44d9afa /cluster_library.c
parent97bb6bd85e3fa38dbb13b97c50bd315490265a80 (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.c13
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();