@@ -1771,6 +1771,7 @@ static int redis_gen_pf_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
1771
1771
char * mem , * key ;
1772
1772
int key_free , mem_len , mem_free , argc = 1 ;
1773
1773
strlen_t key_len ;
1774
+ zend_string * zstr ;
1774
1775
1775
1776
// Parse arguments
1776
1777
if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "sa" , & key , & key_len ,
@@ -1801,20 +1802,11 @@ static int redis_gen_pf_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
1801
1802
1802
1803
// Now iterate over the rest of our keys or values
1803
1804
ZEND_HASH_FOREACH_VAL (ht_arr , z_ele ) {
1804
- zval z_tmp ;
1805
-
1806
- ZVAL_NULL (& z_tmp );
1807
1805
// Prefix keys, serialize values
1808
1806
if (is_keys ) {
1809
- if (Z_TYPE_P (z_ele ) == IS_STRING ) {
1810
- mem = Z_STRVAL_P (z_ele );
1811
- mem_len = Z_STRLEN_P (z_ele );
1812
- } else {
1813
- ZVAL_ZVAL (& z_tmp , z_ele , 1 , 0 );
1814
- convert_to_string (& z_tmp );
1815
- mem = Z_STRVAL (z_tmp );
1816
- mem_len = Z_STRLEN (z_tmp );
1817
- }
1807
+ zstr = zval_get_string (z_ele );
1808
+ mem = zstr -> val ;
1809
+ mem_len = zstr -> len ;
1818
1810
1819
1811
// Key prefix
1820
1812
mem_free = redis_key_prefix (redis_sock , & mem , & mem_len );
@@ -1823,32 +1815,27 @@ static int redis_gen_pf_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
1823
1815
if (slot && * slot != cluster_hash_key (mem , mem_len )) {
1824
1816
php_error_docref (0 TSRMLS_CC , E_WARNING ,
1825
1817
"All keys must hash to the same slot!" );
1818
+ zend_string_release (zstr );
1826
1819
if (key_free ) efree (key );
1827
- zval_dtor (& z_tmp );
1828
1820
return FAILURE ;
1829
1821
}
1830
1822
} else {
1831
1823
mem_free = redis_serialize (redis_sock , z_ele , & mem , & mem_len
1832
1824
TSRMLS_CC );
1833
1825
1826
+ zstr = NULL ;
1834
1827
if (!mem_free ) {
1835
- if (Z_TYPE_P (z_ele ) == IS_STRING ) {
1836
- mem = Z_STRVAL_P (z_ele );
1837
- mem_len = Z_STRLEN_P (z_ele );
1838
- } else {
1839
- ZVAL_ZVAL (& z_tmp , z_ele , 1 , 0 );
1840
- convert_to_string (& z_tmp );
1841
- mem = Z_STRVAL (z_tmp );
1842
- mem_len = Z_STRLEN (z_tmp );
1843
- }
1828
+ zstr = zval_get_string (z_ele );
1829
+ mem = zstr -> val ;
1830
+ mem_len = zstr -> len ;
1844
1831
}
1845
1832
}
1846
1833
1847
1834
// Append our key or member
1848
1835
redis_cmd_append_sstr (& cmdstr , mem , mem_len );
1849
1836
1850
1837
// Clean up our temp val if it was used
1851
- zval_dtor ( & z_tmp );
1838
+ if ( zstr ) zend_string_release ( zstr );
1852
1839
1853
1840
// Clean up prefixed or serialized data
1854
1841
@@ -1884,7 +1871,7 @@ int redis_pfmerge_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
1884
1871
int redis_pfcount_cmd (INTERNAL_FUNCTION_PARAMETERS , RedisSock * redis_sock ,
1885
1872
char * * cmd , int * cmd_len , short * slot , void * * ctx )
1886
1873
{
1887
- zval * z_keys , * z_key , z_tmp ;
1874
+ zval * z_keys , * z_key ;
1888
1875
HashTable * ht_keys ;
1889
1876
smart_string cmdstr = {0 };
1890
1877
int num_keys , key_len , key_free ;
0 commit comments