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

Skip to content

Commit 5a643b6

Browse files
committed
Use didicated zval to store result
1 parent d9cb594 commit 5a643b6

1 file changed

Lines changed: 15 additions & 14 deletions

File tree

redis.c

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2023,11 +2023,10 @@ PHP_METHOD(Redis, discard)
20232023

20242024
PHP_REDIS_API int
20252025
redis_sock_read_multibulk_multi_reply(INTERNAL_FUNCTION_PARAMETERS,
2026-
RedisSock *redis_sock)
2026+
RedisSock *redis_sock, zval *z_tab)
20272027
{
20282028

20292029
char inbuf[4096];
2030-
int numElems;
20312030
size_t len;
20322031

20332032
if (redis_sock_gets(redis_sock, inbuf, sizeof(inbuf) - 1, &len) < 0 ||
@@ -2036,10 +2035,10 @@ redis_sock_read_multibulk_multi_reply(INTERNAL_FUNCTION_PARAMETERS,
20362035
return FAILURE;
20372036
}
20382037

2039-
array_init(return_value);
2038+
array_init(z_tab);
20402039

20412040
return redis_sock_read_multibulk_multi_reply_loop(INTERNAL_FUNCTION_PARAM_PASSTHRU,
2042-
redis_sock, return_value);
2041+
redis_sock, z_tab);
20432042
}
20442043

20452044

@@ -2049,7 +2048,7 @@ PHP_METHOD(Redis, exec)
20492048
RedisSock *redis_sock;
20502049
char *cmd;
20512050
int cmd_len, ret;
2052-
zval *object;
2051+
zval *object, z_ret;
20532052

20542053
if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(),
20552054
"O", &object, redis_ce) == FAILURE ||
@@ -2070,31 +2069,32 @@ PHP_METHOD(Redis, exec)
20702069
SOCKET_WRITE_COMMAND(redis_sock, cmd, cmd_len)
20712070
efree(cmd);
20722071

2072+
ZVAL_NULL(&z_ret);
20732073
ret = redis_sock_read_multibulk_multi_reply(
2074-
INTERNAL_FUNCTION_PARAM_PASSTHRU, redis_sock);
2074+
INTERNAL_FUNCTION_PARAM_PASSTHRU, redis_sock, &z_ret);
20752075
free_reply_callbacks(redis_sock);
20762076
REDIS_DISABLE_MODE(redis_sock, MULTI);
20772077
redis_sock->watching = 0;
20782078
if (ret < 0) {
2079-
zval_dtor(return_value);
2080-
RETURN_FALSE;
2079+
zval_dtor(&z_ret);
2080+
ZVAL_FALSE(&z_ret);
20812081
}
20822082
}
20832083

20842084
if (IS_PIPELINE(redis_sock)) {
20852085
if (redis_sock->pipeline_cmd == NULL) {
20862086
/* Empty array when no command was run. */
2087-
array_init(return_value);
2087+
array_init(&z_ret);
20882088
} else {
20892089
if (redis_sock_write(redis_sock, ZSTR_VAL(redis_sock->pipeline_cmd),
20902090
ZSTR_LEN(redis_sock->pipeline_cmd)) < 0) {
2091-
ZVAL_FALSE(return_value);
2091+
ZVAL_FALSE(&z_ret);
20922092
} else {
2093-
array_init(return_value);
2093+
array_init(&z_ret);
20942094
if (redis_sock_read_multibulk_multi_reply_loop(
2095-
INTERNAL_FUNCTION_PARAM_PASSTHRU, redis_sock, return_value) != SUCCESS) {
2096-
zval_dtor(return_value);
2097-
RETVAL_FALSE;
2095+
INTERNAL_FUNCTION_PARAM_PASSTHRU, redis_sock, &z_ret) != SUCCESS) {
2096+
zval_dtor(&z_ret);
2097+
ZVAL_FALSE(&z_ret);
20982098
}
20992099
}
21002100
zend_string_release(redis_sock->pipeline_cmd);
@@ -2103,6 +2103,7 @@ PHP_METHOD(Redis, exec)
21032103
free_reply_callbacks(redis_sock);
21042104
REDIS_DISABLE_MODE(redis_sock, PIPELINE);
21052105
}
2106+
RETURN_ZVAL(&z_ret, 1, 0);
21062107
}
21072108

21082109
PHP_REDIS_API int

0 commit comments

Comments
 (0)