@@ -1085,6 +1085,8 @@ PHP_METHOD(RedisArray, mset)
10851085 } ZEND_HASH_FOREACH_END ();
10861086
10871087
1088+ /* prepare call */
1089+ ZVAL_STRINGL (& z_fun , "MSET" , 4 );
10881090 /* calls */
10891091 for (n = 0 ; n < ra -> count ; ++ n ) { /* for each node */
10901092 int found = 0 ;
@@ -1093,11 +1095,9 @@ PHP_METHOD(RedisArray, mset)
10931095 array_init (& z_argarray );
10941096 for (i = 0 ; i < argc ; ++ i ) {
10951097 if (pos [i ] != n ) continue ;
1098+ zval zv , * z_tmp = & zv ;
10961099#if (PHP_MAJOR_VERSION < 7 )
1097- zval * z_tmp ;
10981100 MAKE_STD_ZVAL (z_tmp );
1099- #else
1100- zval zv , * z_tmp = & zv ;
11011101#endif
11021102 ZVAL_ZVAL (z_tmp , argv [i ], 1 , 0 );
11031103 add_assoc_zval_ex (& z_argarray , keys [i ], key_lens [i ], z_tmp );
@@ -1110,25 +1110,21 @@ PHP_METHOD(RedisArray, mset)
11101110 continue ; /* don't run empty MSETs */
11111111 }
11121112
1113- /* prepare call */
1114- ZVAL_STRINGL (& z_fun , "MSET" , 4 );
11151113 if (ra -> index ) { /* add MULTI */
11161114 ra_index_multi (& ra -> redis [n ], MULTI TSRMLS_CC );
11171115 }
11181116
11191117 /* call */
11201118 call_user_function (& redis_ce -> function_table , & ra -> redis [n ], & z_fun , & z_ret , 1 , & z_argarray );
1119+ zval_dtor (& z_ret );
11211120
11221121 if (ra -> index ) {
11231122 ra_index_keys (& z_argarray , & ra -> redis [n ] TSRMLS_CC ); /* use SADD to add keys to node index */
11241123 ra_index_exec (& ra -> redis [n ], NULL , 0 TSRMLS_CC ); /* run EXEC */
11251124 }
1126-
1127- zval_dtor (& z_fun );
1128- zval_dtor (& z_ret );
1129-
11301125 zval_dtor (& z_argarray );
11311126 }
1127+ zval_dtor (& z_fun );
11321128
11331129 /* Free any keys that we needed to allocate memory for, because they weren't strings */
11341130 for (i = 0 ; i < argc ; i ++ ) {
@@ -1162,7 +1158,9 @@ PHP_METHOD(RedisArray, del)
11621158
11631159 /* get all args in z_args */
11641160 z_args = emalloc (argc * sizeof (zval ));
1165- if (zend_get_parameters_array (ht , argc , z_args ) == FAILURE ) {
1161+ if (zend_get_parameters_array (ht , argc , z_args ) == FAILURE ||
1162+ redis_array_get (getThis (), & ra TSRMLS_CC ) < 0
1163+ ) {
11661164 efree (z_args );
11671165 RETURN_FALSE ;
11681166 }
@@ -1188,12 +1186,6 @@ PHP_METHOD(RedisArray, del)
11881186 free_zkeys = 1 ;
11891187 }
11901188
1191-
1192- if (redis_array_get (getThis (), & ra TSRMLS_CC ) < 0 ) {
1193- efree (z_args );
1194- RETURN_FALSE ;
1195- }
1196-
11971189 /* prepare call */
11981190 ZVAL_STRINGL (& z_fun , "DEL" , 3 );
11991191
@@ -1211,6 +1203,8 @@ PHP_METHOD(RedisArray, del)
12111203 ZEND_HASH_FOREACH_VAL (h_keys , data ) {
12121204 if (Z_TYPE_P (data ) != IS_STRING ) {
12131205 php_error_docref (NULL TSRMLS_CC , E_ERROR , "DEL: all keys must be string." );
1206+ if (free_zkeys ) zval_dtor (& z_keys );
1207+ efree (z_args );
12141208 efree (argv );
12151209 efree (pos );
12161210 RETURN_FALSE ;
0 commit comments