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:
authorNicolas Favre-Felix <n.favrefelix@gmail.com>2010-09-17 16:22:08 +0400
committerNicolas Favre-Felix <n.favrefelix@gmail.com>2010-09-17 16:22:08 +0400
commitc697ca1df37f925943c394a31310b76ccb5037c7 (patch)
tree33142e3469874d8f9ff7b2933b91b5808ef43367 /redis.c
parentc55a28344594540eb8e626a789845fac2d39df2b (diff)
Simplified code for pipeline and multi/exec.
Diffstat (limited to 'redis.c')
-rwxr-xr-xredis.c82
1 files changed, 24 insertions, 58 deletions
diff --git a/redis.c b/redis.c
index 3b810b8a..622f61df 100755
--- a/redis.c
+++ b/redis.c
@@ -36,10 +36,6 @@
static int le_redis_sock;
static int le_redis_multi_access_type;
-int le_redis_multi_head;
-int le_redis_multi_current;
-int le_redis_pipeline_head;
-int le_redis_pipeline_current;
static zend_class_entry *redis_ce;
static zend_class_entry *redis_exception_ce;
@@ -281,30 +277,6 @@ PHP_MINIT_FUNCTION(redis)
redis_multi_access_type_name, module_number
);
- le_redis_multi_head = zend_register_list_destructors_ex(
- redis_destructor_multi_access,
- NULL,
- redis_multi_access_type_name, module_number
- );
-
- le_redis_multi_current = zend_register_list_destructors_ex(
- redis_destructor_multi_access,
- NULL,
- redis_multi_access_type_name, module_number
- );
-
- le_redis_pipeline_head = zend_register_list_destructors_ex(
- redis_destructor_multi_access,
- NULL,
- redis_multi_access_type_name, module_number
- );
-
- le_redis_pipeline_current = zend_register_list_destructors_ex(
- redis_destructor_multi_access,
- NULL,
- redis_multi_access_type_name, module_number
- );
-
add_constant_long(redis_ce, "REDIS_NOT_FOUND", REDIS_NOT_FOUND);
add_constant_long(redis_ce, "REDIS_STRING", REDIS_STRING);
add_constant_long(redis_ce, "REDIS_SET", REDIS_SET);
@@ -367,10 +339,6 @@ PHP_METHOD(Redis, __construct)
add_property_resource(object, "multi_flag", id);
set_flag(object, REDIS_ATOMIC TSRMLS_CC);
- set_multi_head(object, NULL);
- set_multi_current(object, NULL);
- set_pipeline_head(object, NULL);
- set_pipeline_current(object, NULL);
}
/* }}} */
@@ -437,8 +405,8 @@ PHP_METHOD(Redis, connect)
id = zend_list_insert(redis_sock, le_redis_sock);
add_property_resource(object, "socket", id);
- int fd = socket(AF_INET, SOCK_STREAM, 0);
- printf("fd=%d\n", fd);
+ // int fd = socket(AF_INET, SOCK_STREAM, 0);
+ // printf("fd=%d\n", fd);
RETURN_TRUE;
}
@@ -4254,7 +4222,7 @@ PHP_METHOD(Redis, multi)
RETURN_FALSE;
}
- set_multi_current(getThis(), NULL); /* current = NULL; */
+ redis_sock->current = NULL;
IF_MULTI() {
cmd_len = redis_cmd_format(&cmd, "*1" _NL "$5" _NL "MULTI" _NL);
@@ -4277,7 +4245,7 @@ PHP_METHOD(Redis, multi)
RETURN_FALSE;
}
IF_PIPELINE() {
- free_reply_callbacks(getThis());
+ free_reply_callbacks(getThis(), redis_sock);
RETURN_ZVAL(getThis(), 1, 0);
}
}
@@ -4332,7 +4300,7 @@ PHPAPI int redis_sock_read_multibulk_pipeline_reply(INTERNAL_FUNCTION_PARAMETERS
efree(z_tab);
/* free allocated function/request memory */
- free_reply_callbacks(getThis());
+ free_reply_callbacks(getThis(), redis_sock);
return 0;
@@ -4373,29 +4341,27 @@ PHPAPI int redis_sock_read_multibulk_multi_reply(INTERNAL_FUNCTION_PARAMETERS,
}
void
-free_reply_callbacks(zval *z_this) {
+free_reply_callbacks(zval *z_this, RedisSock *redis_sock) {
fold_item *fi;
- fold_item *head = get_multi_head(z_this);
+ fold_item *head = redis_sock->head;
for(fi = head; fi; ) {
fold_item *fi_next = fi->next;
free(fi);
fi = fi_next;
}
- set_multi_head(z_this, NULL);
- set_multi_current(z_this, NULL);
-
+ redis_sock->head = NULL;
+ redis_sock->current = NULL;
request_item *ri;
- for(ri = get_pipeline_head(z_this); ri; ) {
+ for(ri = redis_sock->pipeline_head; ri; ) {
struct request_item *ri_next = ri->next;
free(ri->request_str);
free(ri);
ri = ri_next;
}
- set_pipeline_head(z_this, NULL);
- set_pipeline_current(z_this, NULL);
-
+ redis_sock->pipeline_head = NULL;
+ redis_sock->pipeline_current = NULL;
}
/* exec */
@@ -4428,11 +4394,11 @@ PHP_METHOD(Redis, exec)
if (redis_sock_read_multibulk_multi_reply(INTERNAL_FUNCTION_PARAM_PASSTHRU, redis_sock) < 0) {
zval_dtor(return_value);
- free_reply_callbacks(object);
+ free_reply_callbacks(object, redis_sock);
set_flag(object, REDIS_ATOMIC TSRMLS_CC);
RETURN_FALSE;
}
- free_reply_callbacks(object);
+ free_reply_callbacks(object, redis_sock);
set_flag(object, REDIS_ATOMIC TSRMLS_CC);
}
@@ -4443,7 +4409,7 @@ PHP_METHOD(Redis, exec)
int offset = 0;
/* compute the total request size */
- for(ri = get_pipeline_head(object); ri; ri = ri->next) {
+ for(ri = redis_sock->pipeline_head; ri; ri = ri->next) {
total += ri->request_size;
}
if(total) {
@@ -4451,7 +4417,7 @@ PHP_METHOD(Redis, exec)
}
/* concatenate individual elements one by one in the target buffer */
- for(ri = get_pipeline_head(object); ri; ri = ri->next) {
+ for(ri = redis_sock->pipeline_head; ri; ri = ri->next) {
memcpy(request + offset, ri->request_str, ri->request_size);
offset += ri->request_size;
}
@@ -4459,25 +4425,25 @@ PHP_METHOD(Redis, exec)
if(request != NULL) {
if (redis_sock_write(redis_sock, request, total) < 0) {
free(request);
- free_reply_callbacks(object);
+ free_reply_callbacks(object, redis_sock);
set_flag(object, REDIS_ATOMIC TSRMLS_CC);
RETURN_FALSE;
}
free(request);
} else {
set_flag(object, REDIS_ATOMIC TSRMLS_CC);
- free_reply_callbacks(object);
+ free_reply_callbacks(object, redis_sock);
array_init(return_value); /* empty array when no command was run. */
return;
}
if (redis_sock_read_multibulk_pipeline_reply(INTERNAL_FUNCTION_PARAM_PASSTHRU, redis_sock) < 0) {
set_flag(object, REDIS_ATOMIC TSRMLS_CC);
- free_reply_callbacks(object);
+ free_reply_callbacks(object, redis_sock);
RETURN_FALSE;
}
set_flag(object, REDIS_ATOMIC TSRMLS_CC);
- free_reply_callbacks(object);
+ free_reply_callbacks(object, redis_sock);
}
}
@@ -4489,12 +4455,12 @@ PHPAPI int redis_sock_read_multibulk_multi_reply_loop(INTERNAL_FUNCTION_PARAMETE
RedisSock *redis_sock, zval *z_tab, int numElems)
{
- fold_item *head = get_multi_head(getThis());
- fold_item *current = get_multi_current(getThis());
+ fold_item *head = redis_sock->head;
+ fold_item *current = redis_sock->current;
for(current = head; current; current = current->next) {
fold_this_item(INTERNAL_FUNCTION_PARAM_PASSTHRU, current, redis_sock, z_tab);
}
- set_multi_current(getThis(), current);
+ redis_sock->current = current;
return 0;
}
@@ -4519,7 +4485,7 @@ PHP_METHOD(Redis, pipeline)
We need the response format of the n - 1 command. So, we can delete when n > 2, the { 1 .. n - 2} commands
*/
- free_reply_callbacks(getThis());
+ free_reply_callbacks(getThis(), redis_sock);
RETURN_ZVAL(getThis(), 1, 0);
}