@@ -91,7 +91,7 @@ static void redis_array_free(RedisArray *ra) {
91
91
for (i = 0 ;i < ra -> count ;i ++ ) {
92
92
zval_dtor (& ra -> redis [i ]);
93
93
efree (& ra -> redis [i ]);
94
- efree (& ra -> hosts [i ]);
94
+ efree (ra -> hosts [i ]);
95
95
}
96
96
efree (ra -> redis );
97
97
efree (ra -> hosts );
@@ -213,6 +213,10 @@ PHP_METHOD(RedisArray, __construct)
213
213
zend_bool b_lazy_connect = 0 ;
214
214
double d_connect_timeout = 0 ;
215
215
216
+ /* Initialize custom functions to 'undefined' */
217
+ ZVAL_UNDEF (& z_fun );
218
+ ZVAL_UNDEF (& z_dist );
219
+
216
220
if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "z|a" , & z0 , & z_opts ) == FAILURE ) {
217
221
RETURN_FALSE ;
218
222
}
@@ -321,7 +325,7 @@ ra_forward_call(INTERNAL_FUNCTION_PARAMETERS, RedisArray *ra, const char *cmd, i
321
325
int key_len ;
322
326
int i ;
323
327
zval * redis_inst ;
324
- zval z_fun , * * z_callargs ;
328
+ zval z_fun , * z_callargs ;
325
329
HashPosition pointer ;
326
330
HashTable * h_args ;
327
331
@@ -357,27 +361,28 @@ ra_forward_call(INTERNAL_FUNCTION_PARAMETERS, RedisArray *ra, const char *cmd, i
357
361
358
362
/* pass call through */
359
363
ZVAL_STRING (& z_fun , cmd ); /* method name */
360
- z_callargs = emalloc (argc * sizeof (zval * ));
364
+ z_callargs = emalloc (argc * sizeof (zval ));
361
365
362
366
/* copy args to array */
363
367
for (i = 0 , zend_hash_internal_pointer_reset_ex (h_args , & pointer );
364
368
(zp_tmp = zend_hash_get_current_data_ex (h_args , & pointer )) != NULL ;
365
- ++ i , zend_hash_move_forward_ex (h_args , & pointer )) {
366
-
367
- ZVAL_DUP (z_callargs [i ], zp_tmp );
369
+ ++ i , zend_hash_move_forward_ex (h_args , & pointer ))
370
+ {
371
+ ZVAL_DUP (& z_callargs [i ], zp_tmp );
372
+ // ZVAL_DUP(z_callargs[i], zp_tmp);
368
373
}
369
374
370
375
/* multi/exec */
371
376
if (ra -> z_multi_exec ) {
372
- call_user_function (& redis_ce -> function_table , ra -> z_multi_exec , & z_fun , return_value , argc , * z_callargs TSRMLS_CC );
377
+ call_user_function (& redis_ce -> function_table , ra -> z_multi_exec , & z_fun , return_value , argc , z_callargs TSRMLS_CC );
373
378
efree (z_callargs );
374
379
RETURN_ZVAL (getThis (), 1 , 0 );
375
380
}
376
381
377
382
/* CALL! */
378
383
if (ra -> index && b_write_cmd ) {
379
384
/* call using discarded temp value and extract exec results after. */
380
- call_user_function (& redis_ce -> function_table , redis_inst , & z_fun , & z_tmp , argc , * z_callargs TSRMLS_CC );
385
+ call_user_function (& redis_ce -> function_table , redis_inst , & z_fun , & z_tmp , argc , z_callargs TSRMLS_CC );
381
386
zval_dtor (& z_tmp );
382
387
383
388
/* add keys to index. */
@@ -386,7 +391,7 @@ ra_forward_call(INTERNAL_FUNCTION_PARAMETERS, RedisArray *ra, const char *cmd, i
386
391
/* call EXEC */
387
392
ra_index_exec (redis_inst , return_value , 0 TSRMLS_CC );
388
393
} else { /* call directly through. */
389
- call_user_function (& redis_ce -> function_table , redis_inst , & z_fun , return_value , argc , * z_callargs TSRMLS_CC );
394
+ call_user_function (& redis_ce -> function_table , redis_inst , & z_fun , return_value , argc , z_callargs TSRMLS_CC );
390
395
391
396
/* check if we have an error. */
392
397
if (RA_CALL_FAILED (return_value ,cmd ) && ra -> prev && !b_write_cmd ) { /* there was an error reading, try with prev ring. */
0 commit comments