Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit c697ca1

Browse files
committed
Simplified code for pipeline and multi/exec.
1 parent c55a283 commit c697ca1

File tree

4 files changed

+61
-175
lines changed

4 files changed

+61
-175
lines changed

common.h

Lines changed: 31 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@
4343
fold_item *f1 = malloc(sizeof(fold_item)); \
4444
f1->fun = (void *)callback; \
4545
f1->next = NULL; \
46-
fold_item *current = get_multi_current(getThis());\
46+
fold_item *current = redis_sock->current;\
4747
if(current) current->next = f1; \
48-
set_multi_current(getThis(), f1); \
48+
redis_sock->current = f1; \
4949
}
5050

5151
#define PIPELINE_ENQUEUE_COMMAND(cmd, cmd_len) request_item *tmp; \
@@ -55,13 +55,13 @@
5555
tmp->request_size = cmd_len;\
5656
tmp->next = NULL;\
5757
zval *z_this = getThis(); \
58-
struct request_item *current_request = get_pipeline_current(z_this); \
58+
struct request_item *current_request = redis_sock->pipeline_current; \
5959
if(current_request) {\
6060
current_request->next = tmp;\
6161
} \
62-
set_pipeline_current(z_this, tmp); \
63-
if(NULL == get_pipeline_head(z_this)) { \
64-
set_pipeline_head(z_this, get_pipeline_current(z_this)); \
62+
redis_sock->pipeline_current = tmp; \
63+
if(NULL == redis_sock->pipeline_head) { \
64+
redis_sock->pipeline_head = redis_sock->pipeline_current;\
6565
/* head_request = current_request;*/ \
6666
}
6767

@@ -74,12 +74,12 @@
7474
fold_item *f1 = malloc(sizeof(fold_item)); \
7575
f1->fun = (void *)callback; \
7676
f1->next = NULL; \
77-
fold_item *current = get_multi_current(getThis());\
77+
fold_item *current = redis_sock->current;\
7878
if(current) current->next = f1; \
79-
set_multi_current(getThis(), f1); \
80-
if(NULL == get_multi_head(getThis())) { \
79+
redis_sock->current = f1; \
80+
if(NULL == redis_sock->head) { \
8181
/* head = current;*/ \
82-
set_multi_head(getThis(), get_multi_current(getThis()));\
82+
redis_sock->head = redis_sock->current;\
8383
}\
8484
}
8585

@@ -112,19 +112,10 @@ else if(get_flag(object TSRMLS_CC) == REDIS_MULTI) { \
112112
REDIS_ELSE_IF_MULTI(function) \
113113
REDIS_ELSE_IF_PIPELINE(function);
114114

115-
/* {{{ struct RedisSock */
116-
typedef struct RedisSock_ {
117-
php_stream *stream;
118-
char *host;
119-
unsigned short port;
120-
long timeout;
121-
int failed;
122-
int status;
123-
} RedisSock;
124-
/* }}} */
115+
typedef enum {ATOMIC, MULTI, PIPELINE} redis_mode;
125116

126117
typedef struct fold_item {
127-
zval * (*fun)(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, ...);
118+
zval * (*fun)(INTERNAL_FUNCTION_PARAMETERS, void *, ...);
128119
struct fold_item *next;
129120
} fold_item;
130121

@@ -134,5 +125,23 @@ typedef struct request_item {
134125
struct request_item *next;
135126
} request_item;
136127

128+
/* {{{ struct RedisSock */
129+
typedef struct {
130+
php_stream *stream;
131+
char *host;
132+
unsigned short port;
133+
long timeout;
134+
int failed;
135+
int status;
136+
137+
redis_mode mode;
138+
fold_item *head;
139+
fold_item *current;
140+
141+
request_item *pipeline_head;
142+
request_item *pipeline_current;
143+
} RedisSock;
144+
/* }}} */
145+
137146
void
138-
free_reply_callbacks(zval *z_this);
147+
free_reply_callbacks(zval *z_this, RedisSock *redis_sock);

library.c

Lines changed: 6 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,12 @@ PHPAPI RedisSock* redis_sock_create(char *host, int host_len, unsigned short por
445445
redis_sock->port = port;
446446
redis_sock->timeout = timeout;
447447

448+
redis_sock->mode = ATOMIC;
449+
redis_sock->head = NULL;
450+
redis_sock->current = NULL;
451+
redis_sock->pipeline_head = NULL;
452+
redis_sock->pipeline_current = NULL;
453+
448454
return redis_sock;
449455
}
450456

@@ -620,91 +626,3 @@ PHPAPI void redis_free_socket(RedisSock *redis_sock)
620626
efree(redis_sock);
621627
}
622628

623-
624-
PHPAPI fold_item* get_multi_head(zval *object TSRMLS_DC) {
625-
626-
zval **multi_head = NULL;
627-
int type;
628-
629-
zend_hash_find(Z_OBJPROP_P(object), "multi_head", sizeof("multi_head"), (void **) &multi_head);
630-
return zend_list_find(Z_LVAL_PP(multi_head), &type);
631-
}
632-
633-
PHPAPI void set_multi_head(zval *object, fold_item *head TSRMLS_DC) {
634-
635-
zval **multi_head = NULL;
636-
637-
zend_hash_find(Z_OBJPROP_P(object), "multi_head", sizeof("multi_head"), (void **) &multi_head);
638-
if(multi_head) { /* replace */
639-
zend_list_delete(Z_LVAL_PP(multi_head));
640-
}
641-
642-
int list_id = zend_list_insert(head, le_redis_multi_head);
643-
add_property_resource(object, "multi_head", list_id);
644-
}
645-
646-
PHPAPI fold_item* get_multi_current(zval *object TSRMLS_DC) {
647-
648-
zval **multi_current = NULL;
649-
int type;
650-
651-
zend_hash_find(Z_OBJPROP_P(object), "multi_current", sizeof("multi_current"), (void **) &multi_current);
652-
return zend_list_find(Z_LVAL_PP(multi_current), &type);
653-
}
654-
655-
PHPAPI void set_multi_current(zval *object, fold_item *current TSRMLS_DC) {
656-
657-
zval **multi_current = NULL;
658-
659-
zend_hash_find(Z_OBJPROP_P(object), "multi_current", sizeof("multi_current"), (void **) &multi_current);
660-
if(multi_current) { /* replace */
661-
zend_list_delete(Z_LVAL_PP(multi_current));
662-
}
663-
664-
int list_id = zend_list_insert(current, le_redis_multi_current);
665-
add_property_resource(object, "multi_current", list_id);
666-
}
667-
668-
PHPAPI request_item* get_pipeline_head(zval *object TSRMLS_DC) {
669-
670-
zval **pipeline_head = NULL;
671-
int type;
672-
673-
zend_hash_find(Z_OBJPROP_P(object), "pipeline_head", sizeof("pipeline_head"), (void **) &pipeline_head);
674-
return zend_list_find(Z_LVAL_PP(pipeline_head), &type);
675-
}
676-
677-
PHPAPI void set_pipeline_head(zval *object, request_item *head TSRMLS_DC) {
678-
679-
zval **pipeline_head = NULL;
680-
681-
zend_hash_find(Z_OBJPROP_P(object), "pipeline_head", sizeof("pipeline_head"), (void **) &pipeline_head);
682-
if(pipeline_head) { /* replace */
683-
zend_list_delete(Z_LVAL_PP(pipeline_head));
684-
}
685-
686-
int list_id = zend_list_insert(head, le_redis_pipeline_head);
687-
add_property_resource(object, "pipeline_head", list_id);
688-
}
689-
690-
PHPAPI request_item* get_pipeline_current(zval *object TSRMLS_DC) {
691-
692-
zval **pipeline_current = NULL;
693-
int type;
694-
695-
zend_hash_find(Z_OBJPROP_P(object), "pipeline_current", sizeof("pipeline_current"), (void **) &pipeline_current);
696-
return zend_list_find(Z_LVAL_PP(pipeline_current), &type);
697-
}
698-
699-
PHPAPI void set_pipeline_current(zval *object, request_item *current TSRMLS_DC) {
700-
701-
zval **pipeline_current = NULL;
702-
703-
zend_hash_find(Z_OBJPROP_P(object), "pipeline_current", sizeof("pipeline_current"), (void **) &pipeline_current);
704-
if(pipeline_current) { /* replace */
705-
zend_list_delete(Z_LVAL_PP(pipeline_current));
706-
}
707-
708-
int list_id = zend_list_insert(current, le_redis_pipeline_current);
709-
add_property_resource(object, "pipeline_current", list_id);
710-
}

php_redis.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -152,12 +152,6 @@ PHPAPI int redis_response_enqueued(RedisSock *redis_sock TSRMLS_DC);
152152
PHPAPI int get_flag(zval *object TSRMLS_DC);
153153
PHPAPI void set_flag(zval *object, int new_flag TSRMLS_DC);
154154

155-
/* MULTI/EXEC */
156-
PHPAPI fold_item* get_multi_head(zval *object);
157-
PHPAPI void set_multi_head(zval *object, fold_item *head);
158-
PHPAPI fold_item* get_multi_current(zval *object);
159-
PHPAPI void set_multi_current(zval *object, fold_item *current);
160-
161155
/* pipeline */
162156
PHPAPI request_item* get_pipeline_head(zval *object);
163157
PHPAPI void set_pipeline_head(zval *object, request_item *head);
@@ -167,7 +161,6 @@ PHPAPI void set_pipeline_current(zval *object, request_item *current);
167161
ZEND_BEGIN_MODULE_GLOBALS(redis)
168162
ZEND_END_MODULE_GLOBALS(redis)
169163

170-
typedef enum {ATOMIC, MULTI, PIPELINE} redis_mode;
171164

172165
struct redis_queued_item {
173166

0 commit comments

Comments
 (0)