@@ -345,7 +345,7 @@ PHP_METHOD(RedisArray, __construct)
345
345
static void
346
346
ra_forward_call (INTERNAL_FUNCTION_PARAMETERS , RedisArray * ra , const char * cmd , int cmd_len , zval * z_args , zval * z_new_target ) {
347
347
348
- zval z_tmp , z_fun , * redis_inst , * z_callargs , * zp_tmp ;
348
+ zval z_fun , * redis_inst , * z_callargs , * zp_tmp ;
349
349
char * key = NULL ; /* set to avoid "unused-but-set-variable" */
350
350
int i , key_len = 0 , argc ;
351
351
HashTable * h_args ;
@@ -358,10 +358,12 @@ ra_forward_call(INTERNAL_FUNCTION_PARAMETERS, RedisArray *ra, const char *cmd, i
358
358
redis_inst = ra -> z_multi_exec ; /* we already have the instance */
359
359
} else {
360
360
/* extract key and hash it. */
361
- if (!( key = ra_find_key ( ra , z_args , cmd , & key_len )) ) {
361
+ if (( zp_tmp = zend_hash_index_find ( h_args , 0 )) == NULL || Z_TYPE_P ( zp_tmp ) != IS_STRING ) {
362
362
php_error_docref (NULL TSRMLS_CC , E_ERROR , "Could not find key" );
363
363
RETURN_FALSE ;
364
- }
364
+ }
365
+ key = Z_STRVAL_P (zp_tmp );
366
+ key_len = Z_STRLEN_P (zp_tmp );
365
367
366
368
/* find node */
367
369
redis_inst = ra_find_node (ra , key , key_len , NULL TSRMLS_CC );
@@ -371,9 +373,6 @@ ra_forward_call(INTERNAL_FUNCTION_PARAMETERS, RedisArray *ra, const char *cmd, i
371
373
}
372
374
}
373
375
374
- /* check if write cmd */
375
- b_write_cmd = ra_is_write_cmd (ra , cmd , cmd_len );
376
-
377
376
/* pass call through */
378
377
ZVAL_STRINGL (& z_fun , cmd , cmd_len ); /* method name */
379
378
z_callargs = ecalloc (argc + 1 , sizeof (zval ));
@@ -387,20 +386,23 @@ ra_forward_call(INTERNAL_FUNCTION_PARAMETERS, RedisArray *ra, const char *cmd, i
387
386
388
387
/* multi/exec */
389
388
if (ra -> z_multi_exec ) {
390
- call_user_function (& redis_ce -> function_table , ra -> z_multi_exec , & z_fun , & z_tmp , argc , z_callargs );
389
+ call_user_function (& redis_ce -> function_table , ra -> z_multi_exec , & z_fun , return_value , argc , z_callargs );
390
+ zval_dtor (return_value );
391
391
zval_dtor (& z_fun );
392
- zval_dtor (& z_tmp );
393
392
efree (z_callargs );
394
393
RETURN_ZVAL (getThis (), 1 , 0 );
395
394
}
396
395
396
+ /* check if write cmd */
397
+ b_write_cmd = ra_is_write_cmd (ra , cmd , cmd_len );
398
+
397
399
/* CALL! */
398
400
if (ra -> index && b_write_cmd ) {
399
401
/* add MULTI + SADD */
400
402
ra_index_multi (redis_inst , MULTI TSRMLS_CC );
401
403
/* call using discarded temp value and extract exec results after. */
402
- call_user_function (& redis_ce -> function_table , redis_inst , & z_fun , & z_tmp , argc , z_callargs );
403
- zval_dtor (& z_tmp );
404
+ call_user_function (& redis_ce -> function_table , redis_inst , & z_fun , return_value , argc , z_callargs );
405
+ zval_dtor (return_value );
404
406
405
407
/* add keys to index. */
406
408
ra_index_key (key , key_len , redis_inst TSRMLS_CC );
0 commit comments