diff options
author | Nicolas Favre-Felix <n.favrefelix@gmail.com> | 2010-09-17 16:22:08 +0400 |
---|---|---|
committer | Nicolas Favre-Felix <n.favrefelix@gmail.com> | 2010-09-17 16:22:08 +0400 |
commit | c697ca1df37f925943c394a31310b76ccb5037c7 (patch) | |
tree | 33142e3469874d8f9ff7b2933b91b5808ef43367 /redis.c | |
parent | c55a28344594540eb8e626a789845fac2d39df2b (diff) |
Simplified code for pipeline and multi/exec.
Diffstat (limited to 'redis.c')
-rwxr-xr-x | redis.c | 82 |
1 files changed, 24 insertions, 58 deletions
@@ -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); } |