diff options
-rw-r--r-- | 2677.patch | 22 | ||||
-rw-r--r-- | PHPINFO | 3 | ||||
-rw-r--r-- | REFLECTION | 512 | ||||
-rw-r--r-- | php-pecl-redis6.spec | 16 | ||||
-rw-r--r-- | redis-8.0.patch | 122 |
5 files changed, 517 insertions, 158 deletions
diff --git a/2677.patch b/2677.patch deleted file mode 100644 index 57d9da4..0000000 --- a/2677.patch +++ /dev/null @@ -1,22 +0,0 @@ -From f20f46525ff36cce29d61ae074c416b4673d3bd8 Mon Sep 17 00:00:00 2001 -From: Remi Collet <remi@remirepo.net> -Date: Wed, 30 Jul 2025 13:29:27 +0200 -Subject: [PATCH] use Zend/zend_smart_string.h - ---- - common.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/common.h b/common.h -index 57e2903b81..7a7ee67b6a 100644 ---- a/common.h -+++ b/common.h -@@ -11,7 +11,7 @@ - #include <ext/standard/php_var.h> - #include <ext/standard/php_math.h> - #include <zend_smart_str.h> --#include <ext/standard/php_smart_string.h> -+#include <zend_smart_string.h> - - #define PHPREDIS_GET_OBJECT(class_entry, o) (class_entry *)((char *)o - XtOffsetOf(class_entry, std)) - #define PHPREDIS_ZVAL_GET_OBJECT(class_entry, z) PHPREDIS_GET_OBJECT(class_entry, Z_OBJ_P(z)) @@ -2,7 +2,7 @@ redis Redis Support => enabled -Redis Version => 6.2.0 +Redis Version => 6.3.0RC1 Redis Sentinel Version => 1.0 Available serializers => php, json, igbinary, msgpack Available compression => lzf, zstd, lz4 @@ -39,6 +39,7 @@ redis.session.locking_enabled => 0 => 0 redis.session.lock_expire => 0 => 0 redis.session.lock_retries => 100 => 100 redis.session.lock_wait_time => 20000 => 20000 +redis.session.lock_failure_readonly => 0 => 0 redis.session.early_refresh => 0 => 0 redis.session.compression => none => none redis.session.compression_level => 3 => 3 @@ -1,4 +1,4 @@ -Extension [ <persistent> extension #136 redis version 6.2.0 ] { +Extension [ <persistent> extension #143 redis version 6.3.0RC1 ] { - Dependencies { Dependency [ igbinary (Required) ] @@ -101,6 +101,9 @@ Extension [ <persistent> extension #136 redis version 6.2.0 ] { Entry [ redis.session.lock_wait_time <ALL> ] Current = '20000' } + Entry [ redis.session.lock_failure_readonly <ALL> ] + Current = '0' + } Entry [ redis.session.early_refresh <ALL> ] Current = '0' } @@ -115,7 +118,7 @@ Extension [ <persistent> extension #136 redis version 6.2.0 ] { - Classes [6] { Class [ <internal:redis> class Redis ] { - - Constants [51] { + - Constants [52] { Constant [ public int REDIS_NOT_FOUND ] { 0 } Constant [ public int REDIS_STRING ] { 1 } Constant [ public int REDIS_SET ] { 2 } @@ -123,6 +126,7 @@ Extension [ <persistent> extension #136 redis version 6.2.0 ] { Constant [ public int REDIS_ZSET ] { 4 } Constant [ public int REDIS_HASH ] { 5 } Constant [ public int REDIS_STREAM ] { 6 } + Constant [ public int REDIS_VECTORSET ] { 7 } Constant [ public int ATOMIC ] { 0 } Constant [ public int MULTI ] { 1 } Constant [ public int PIPELINE ] { 2 } @@ -178,7 +182,7 @@ Extension [ <persistent> extension #136 redis version 6.2.0 ] { - Properties [0] { } - - Methods [260] { + - Methods [286] { Method [ <internal:redis, ctor> public method __construct ] { - Parameters [1] { @@ -532,6 +536,15 @@ Extension [ <persistent> extension #136 redis version 6.2.0 ] { - Return [ Redis|int|false ] } + Method [ <internal:redis> public method delifeq ] { + + - Parameters [2] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> mixed $value ] + } + - Return [ Redis|int|false ] + } + Method [ <internal, deprecated:redis> public method delete ] { - Parameters [2] { @@ -1080,6 +1093,35 @@ Extension [ <persistent> extension #136 redis version 6.2.0 ] { - Return [ Redis|array|false ] } + Method [ <internal:redis> public method hgetex ] { + + - Parameters [3] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> array $fields ] + Parameter #2 [ <optional> array|string|null $expiry = null ] + } + - Return [ Redis|array|false ] + } + + Method [ <internal:redis> public method hsetex ] { + + - Parameters [3] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> array $fields ] + Parameter #2 [ <optional> ?array $expiry = null ] + } + - Return [ Redis|int|false ] + } + + Method [ <internal:redis> public method hgetdel ] { + + - Parameters [2] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> array $fields ] + } + - Return [ Redis|array|false ] + } + Method [ <internal:redis> public method hMset ] { - Parameters [2] { @@ -1134,6 +1176,95 @@ Extension [ <persistent> extension #136 redis version 6.2.0 ] { - Return [ Redis|array|false ] } + Method [ <internal:redis> public method hexpire ] { + + - Parameters [4] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> int $ttl ] + Parameter #2 [ <required> array $fields ] + Parameter #3 [ <optional> ?string $mode = NULL ] + } + - Return [ Redis|array|false ] + } + + Method [ <internal:redis> public method hpexpire ] { + + - Parameters [4] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> int $ttl ] + Parameter #2 [ <required> array $fields ] + Parameter #3 [ <optional> ?string $mode = NULL ] + } + - Return [ Redis|array|false ] + } + + Method [ <internal:redis> public method hexpireat ] { + + - Parameters [4] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> int $time ] + Parameter #2 [ <required> array $fields ] + Parameter #3 [ <optional> ?string $mode = NULL ] + } + - Return [ Redis|array|false ] + } + + Method [ <internal:redis> public method hpexpireat ] { + + - Parameters [4] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> int $mstime ] + Parameter #2 [ <required> array $fields ] + Parameter #3 [ <optional> ?string $mode = NULL ] + } + - Return [ Redis|array|false ] + } + + Method [ <internal:redis> public method httl ] { + + - Parameters [2] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> array $fields ] + } + - Return [ Redis|array|false ] + } + + Method [ <internal:redis> public method hpttl ] { + + - Parameters [2] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> array $fields ] + } + - Return [ Redis|array|false ] + } + + Method [ <internal:redis> public method hexpiretime ] { + + - Parameters [2] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> array $fields ] + } + - Return [ Redis|array|false ] + } + + Method [ <internal:redis> public method hpexpiretime ] { + + - Parameters [2] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> array $fields ] + } + - Return [ Redis|array|false ] + } + + Method [ <internal:redis> public method hpersist ] { + + - Parameters [2] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> array $fields ] + } + - Return [ Redis|array|false ] + } + Method [ <internal:redis> public method hscan ] { - Parameters [4] { @@ -2295,6 +2426,129 @@ Extension [ <persistent> extension #136 redis version 6.2.0 ] { - Return [ Redis|array|bool ] } + Method [ <internal:redis> public method vadd ] { + + - Parameters [4] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> array $values ] + Parameter #2 [ <required> mixed $element ] + Parameter #3 [ <optional> ?array $options = null ] + } + - Return [ Redis|int|false ] + } + + Method [ <internal:redis> public method vsim ] { + + - Parameters [3] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> mixed $member ] + Parameter #2 [ <optional> ?array $options = null ] + } + - Return [ Redis|array|false ] + } + + Method [ <internal:redis> public method vcard ] { + + - Parameters [1] { + Parameter #0 [ <required> string $key ] + } + - Return [ Redis|int|false ] + } + + Method [ <internal:redis> public method vdim ] { + + - Parameters [1] { + Parameter #0 [ <required> string $key ] + } + - Return [ Redis|int|false ] + } + + Method [ <internal:redis> public method vinfo ] { + + - Parameters [1] { + Parameter #0 [ <required> string $key ] + } + - Return [ Redis|array|false ] + } + + Method [ <internal:redis> public method vismember ] { + + - Parameters [2] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> mixed $member ] + } + - Return [ Redis|bool ] + } + + Method [ <internal:redis> public method vemb ] { + + - Parameters [3] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> mixed $member ] + Parameter #2 [ <optional> bool $raw = false ] + } + - Return [ Redis|array|false ] + } + + Method [ <internal:redis> public method vrandmember ] { + + - Parameters [2] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <optional> int $count = 0 ] + } + - Return [ Redis|array|string|false ] + } + + Method [ <internal:redis> public method vrange ] { + + - Parameters [4] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> string $min ] + Parameter #2 [ <required> string $max ] + Parameter #3 [ <optional> int $count = -1 ] + } + - Return [ Redis|array|false ] + } + + Method [ <internal:redis> public method vrem ] { + + - Parameters [2] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> mixed $member ] + } + - Return [ Redis|int|false ] + } + + Method [ <internal:redis> public method vsetattr ] { + + - Parameters [3] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> mixed $member ] + Parameter #2 [ <required> array|string $attributes ] + } + - Return [ Redis|int|false ] + } + + Method [ <internal:redis> public method vgetattr ] { + + - Parameters [3] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> mixed $member ] + Parameter #2 [ <optional> bool $decode = true ] + } + - Return [ Redis|array|string|false ] + } + + Method [ <internal:redis> public method vlinks ] { + + - Parameters [3] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> mixed $member ] + Parameter #2 [ <optional> bool $withscores = false ] + } + - Return [ Redis|array|false ] + } + Method [ <internal:redis> public method xtrim ] { - Parameters [5] { @@ -2909,7 +3163,7 @@ Extension [ <persistent> extension #136 redis version 6.2.0 ] { - Properties [0] { } - - Methods [228] { + - Methods [254] { Method [ <internal:redis, ctor> public method __construct ] { - Parameters [7] { @@ -3294,6 +3548,15 @@ Extension [ <persistent> extension #136 redis version 6.2.0 ] { - Return [ RedisCluster|int|false ] } + Method [ <internal:redis> public method delifeq ] { + + - Parameters [2] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> mixed $value ] + } + - Return [ RedisCluster|int|false ] + } + Method [ <internal:redis> public method discard ] { - Parameters [0] { @@ -3743,6 +4006,35 @@ Extension [ <persistent> extension #136 redis version 6.2.0 ] { - Return [ RedisCluster|array|false ] } + Method [ <internal:redis> public method hgetex ] { + + - Parameters [3] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> array $fields ] + Parameter #2 [ <optional> array|string|null $expiry = null ] + } + - Return [ RedisCluster|array|false ] + } + + Method [ <internal:redis> public method hsetex ] { + + - Parameters [3] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> array $fields ] + Parameter #2 [ <optional> ?array $expiry = null ] + } + - Return [ RedisCluster|int|false ] + } + + Method [ <internal:redis> public method hgetdel ] { + + - Parameters [2] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> array $fields ] + } + - Return [ RedisCluster|array|false ] + } + Method [ <internal:redis> public method hmset ] { - Parameters [2] { @@ -3822,6 +4114,95 @@ Extension [ <persistent> extension #136 redis version 6.2.0 ] { - Return [ RedisCluster|int|false ] } + Method [ <internal:redis> public method hexpire ] { + + - Parameters [4] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> int $ttl ] + Parameter #2 [ <required> array $fields ] + Parameter #3 [ <optional> ?string $mode = NULL ] + } + - Return [ RedisCluster|array|false ] + } + + Method [ <internal:redis> public method hpexpire ] { + + - Parameters [4] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> int $ttl ] + Parameter #2 [ <required> array $fields ] + Parameter #3 [ <optional> ?string $mode = NULL ] + } + - Return [ RedisCluster|array|false ] + } + + Method [ <internal:redis> public method hexpireat ] { + + - Parameters [4] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> int $time ] + Parameter #2 [ <required> array $fields ] + Parameter #3 [ <optional> ?string $mode = NULL ] + } + - Return [ RedisCluster|array|false ] + } + + Method [ <internal:redis> public method hpexpireat ] { + + - Parameters [4] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> int $mstime ] + Parameter #2 [ <required> array $fields ] + Parameter #3 [ <optional> ?string $mode = NULL ] + } + - Return [ RedisCluster|array|false ] + } + + Method [ <internal:redis> public method httl ] { + + - Parameters [2] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> array $fields ] + } + - Return [ RedisCluster|array|false ] + } + + Method [ <internal:redis> public method hpttl ] { + + - Parameters [2] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> array $fields ] + } + - Return [ RedisCluster|array|false ] + } + + Method [ <internal:redis> public method hexpiretime ] { + + - Parameters [2] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> array $fields ] + } + - Return [ RedisCluster|array|false ] + } + + Method [ <internal:redis> public method hpexpiretime ] { + + - Parameters [2] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> array $fields ] + } + - Return [ RedisCluster|array|false ] + } + + Method [ <internal:redis> public method hpersist ] { + + - Parameters [2] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> array $fields ] + } + - Return [ RedisCluster|array|false ] + } + Method [ <internal:redis> public method hvals ] { - Parameters [1] { @@ -4601,6 +4982,129 @@ Extension [ <persistent> extension #136 redis version 6.2.0 ] { - Return [ RedisCluster|bool ] } + Method [ <internal:redis> public method vadd ] { + + - Parameters [4] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> array $values ] + Parameter #2 [ <required> mixed $element ] + Parameter #3 [ <optional> ?array $options = null ] + } + - Return [ RedisCluster|int|false ] + } + + Method [ <internal:redis> public method vsim ] { + + - Parameters [3] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> mixed $member ] + Parameter #2 [ <optional> ?array $options = null ] + } + - Return [ RedisCluster|array|false ] + } + + Method [ <internal:redis> public method vcard ] { + + - Parameters [1] { + Parameter #0 [ <required> string $key ] + } + - Return [ RedisCluster|int|false ] + } + + Method [ <internal:redis> public method vdim ] { + + - Parameters [1] { + Parameter #0 [ <required> string $key ] + } + - Return [ RedisCluster|int|false ] + } + + Method [ <internal:redis> public method vinfo ] { + + - Parameters [1] { + Parameter #0 [ <required> string $key ] + } + - Return [ RedisCluster|array|false ] + } + + Method [ <internal:redis> public method vismember ] { + + - Parameters [2] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> mixed $member ] + } + - Return [ RedisCluster|bool ] + } + + Method [ <internal:redis> public method vemb ] { + + - Parameters [3] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> mixed $member ] + Parameter #2 [ <optional> bool $raw = false ] + } + - Return [ RedisCluster|array|false ] + } + + Method [ <internal:redis> public method vrandmember ] { + + - Parameters [2] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <optional> int $count = 0 ] + } + - Return [ RedisCluster|array|string|false ] + } + + Method [ <internal:redis> public method vrange ] { + + - Parameters [4] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> string $min ] + Parameter #2 [ <required> string $max ] + Parameter #3 [ <optional> int $count = -1 ] + } + - Return [ RedisCluster|array|false ] + } + + Method [ <internal:redis> public method vrem ] { + + - Parameters [2] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> mixed $member ] + } + - Return [ RedisCluster|int|false ] + } + + Method [ <internal:redis> public method vlinks ] { + + - Parameters [3] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> mixed $member ] + Parameter #2 [ <optional> bool $withscores = false ] + } + - Return [ RedisCluster|array|false ] + } + + Method [ <internal:redis> public method vgetattr ] { + + - Parameters [3] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> mixed $member ] + Parameter #2 [ <optional> bool $decode = true ] + } + - Return [ Redis|array|string|false ] + } + + Method [ <internal:redis> public method vsetattr ] { + + - Parameters [3] { + Parameter #0 [ <required> string $key ] + Parameter #1 [ <required> mixed $member ] + Parameter #2 [ <required> array|string $attributes ] + } + - Return [ Redis|int|false ] + } + Method [ <internal:redis> public method xack ] { - Parameters [3] { diff --git a/php-pecl-redis6.spec b/php-pecl-redis6.spec index e68b245..5061d78 100644 --- a/php-pecl-redis6.spec +++ b/php-pecl-redis6.spec @@ -29,22 +29,19 @@ # after 20-json, 40-igbinary and 40-msgpack %global ini_name 50-%{pecl_name}.ini -%global upstream_version 6.2.0 -#global upstream_prever RC2 +%global upstream_version 6.3.0 +%global upstream_prever RC1 %global sources %{pecl_name}-%{upstream_version}%{?upstream_prever} %global _configure ../%{sources}/configure Summary: PHP extension for interfacing with key-value stores Name: %{?scl_prefix}php-pecl-redis6 Version: %{upstream_version}%{?upstream_prever:~%{upstream_prever}} -Release: 4%{?dist}%{!?scl:%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}} +Release: 0%{?dist}%{!?scl:%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}} License: PHP-3.01 URL: https://pecl.php.net/package/redis Source0: https://pecl.php.net/get/%{sources}.tgz -Patch0: redis-8.0.patch -Patch1: 2677.patch - BuildRequires: make BuildRequires: %{?dtsprefix}gcc BuildRequires: %{?scl_prefix}php-devel >= 7.4 @@ -145,9 +142,6 @@ sed -e 's/role="test"/role="src"/' \ -i package.xml cd %{sources} -%patch -P0 -p1 -%patch -P1 -p1 - # Use system library rm -r liblzf @@ -211,6 +205,7 @@ extension = %{pecl_name}.so ;redis.session.lock_expire = 0 ;redis.session.lock_retries = 100 ;redis.session.lock_wait_time = 20000 +;redis.session.lock_failure_readonly = 0 ;redis.session.early_refresh = 0 ;redis.session.compression = none ;redis.session.compression_level = 3 @@ -358,6 +353,9 @@ exit $ret %changelog +* Fri Oct 3 2025 Remi Collet <remi@remirepo.net> - 6.3.0~RC1-0 +- test build for upcoming 6.3.0RC1 + * Thu Sep 25 2025 Remi Collet <remi@remirepo.net> - 6.2.0-4 - rebuild for PHP 8.5.0RC1 diff --git a/redis-8.0.patch b/redis-8.0.patch deleted file mode 100644 index fd713c5..0000000 --- a/redis-8.0.patch +++ /dev/null @@ -1,122 +0,0 @@ -From 593ba012ac49065343f6bbf10adca5047414ce85 Mon Sep 17 00:00:00 2001 -From: michael-grunder <michael.grunder@gmail.com> -Date: Sun, 4 May 2025 10:20:01 -0700 -Subject: [PATCH] Check for `dragonfly_version` in `HELLO` response - -DragonflyDB will report to be Redis but also include `dragonfly_version` -in the hello response, which we can use to identify the fork. - -Also fix parsing of the `HELLO` response for `serverName()` and -`serverVersion()`. Starting in Redis 8.0 there seem to always be modules -running, which the previous function was not expecting or parsing. ---- - library.c | 39 ++++++++++++++++++++++++++------------- - redis.c | 2 +- - tests/RedisTest.php | 2 ++ - 3 files changed, 29 insertions(+), 14 deletions(-) - -diff --git a/library.c b/library.c -index a9fb523e48..ce3e2672d0 100644 ---- a/library.c -+++ b/library.c -@@ -2018,26 +2018,31 @@ static int - redis_hello_response(INTERNAL_FUNCTION_PARAMETERS, - RedisSock *redis_sock, zval *z_tab, void *ctx) - { -- int numElems; - zval z_ret, *zv; -+ int numElems; - -- if (read_mbulk_header(redis_sock, &numElems) < 0) { -- if (IS_ATOMIC(redis_sock)) { -- RETVAL_FALSE; -- } else { -- add_next_index_bool(z_tab, 0); -- } -- return FAILURE; -- } -+ if (read_mbulk_header(redis_sock, &numElems) < 0) -+ goto fail; - - array_init(&z_ret); -- redis_mbulk_reply_zipped_raw_variant(redis_sock, &z_ret, numElems); -+ -+ if (redis_read_multibulk_recursive(redis_sock, numElems, 0, &z_ret) != SUCCESS || -+ array_zip_values_recursive(&z_ret) != SUCCESS) -+ { -+ zval_dtor(&z_ret); -+ goto fail; -+ } - - if (redis_sock->hello.server) { - zend_string_release(redis_sock->hello.server); - } -- zv = zend_hash_str_find(Z_ARRVAL(z_ret), ZEND_STRL("server")); -- redis_sock->hello.server = zv ? zval_get_string(zv) : ZSTR_EMPTY_ALLOC(); -+ -+ if ((zv = zend_hash_str_find(Z_ARRVAL(z_ret), ZEND_STRL("dragonfly_version")))) { -+ redis_sock->hello.server = zend_string_init(ZEND_STRL("dragonfly"), 0); -+ } else { -+ zv = zend_hash_str_find(Z_ARRVAL(z_ret), ZEND_STRL("server")); -+ redis_sock->hello.server = zv ? zval_get_string(zv) : ZSTR_EMPTY_ALLOC(); -+ } - - if (redis_sock->hello.version) { - zend_string_release(redis_sock->hello.version); -@@ -2063,6 +2068,14 @@ redis_hello_response(INTERNAL_FUNCTION_PARAMETERS, - } - - return SUCCESS; -+ -+fail: -+ if (IS_ATOMIC(redis_sock)) { -+ RETVAL_FALSE; -+ } else { -+ add_next_index_bool(z_tab, 0); -+ } -+ return FAILURE; - } - - -@@ -4302,7 +4315,7 @@ redis_read_multibulk_recursive(RedisSock *redis_sock, long long elements, int st - elements--; - } - -- return 0; -+ return SUCCESS; - } - - static int -diff --git a/redis.c b/redis.c -index 3f13a59888..629dd5c20b 100644 ---- a/redis.c -+++ b/redis.c -@@ -2131,7 +2131,7 @@ redis_sock_read_multibulk_multi_reply_loop(INTERNAL_FUNCTION_PARAMETERS, - - int num = atol(inbuf + 1); - -- if (num > 0 && redis_read_multibulk_recursive(redis_sock, num, 0, &z_ret) < 0) { -+ if (num > 0 && redis_read_multibulk_recursive(redis_sock, num, 0, &z_ret) != SUCCESS) { - return FAILURE; - } - } -diff --git a/tests/RedisTest.php b/tests/RedisTest.php -index e7854da442..1ebcc61e51 100644 ---- a/tests/RedisTest.php -+++ b/tests/RedisTest.php -@@ -2476,6 +2476,7 @@ public function testServerInfo() { - $this->markTestSkipped(); - - $hello = $this->execHello(); -+ - if ( ! $this->assertArrayKey($hello, 'server') || - ! $this->assertArrayKey($hello, 'version')) - { -@@ -2486,6 +2487,7 @@ public function testServerInfo() { - $this->assertEquals($hello['version'], $this->redis->serverVersion()); - - $info = $this->redis->info(); -+ - $cmd1 = $info['total_commands_processed']; - - /* Shouldn't hit the server */ |