@@ -89,28 +89,28 @@ static void redis_array_free(RedisArray *ra) {
8989
9090    /* Redis objects */ 
9191    for (i = 0 ;i < ra -> count ;i ++ ) {
92-         zval_dtor (ra -> redis [i ]);
93-         efree (ra -> redis [i ]);
94-         efree (ra -> hosts [i ]);
92+         zval_dtor (& ra -> redis [i ]);
93+         efree (& ra -> redis [i ]);
94+         efree (& ra -> hosts [i ]);
9595    }
9696    efree (ra -> redis );
9797    efree (ra -> hosts );
9898
9999    /* delete hash function */ 
100-     if (ra -> z_fun ) {
101-         zval_dtor (ra -> z_fun );
102-         efree (ra -> z_fun );
100+     if (Z_TYPE ( ra -> z_fun )  !=   IS_UNDEF ) {
101+         zval_dtor (& ra -> z_fun );
102+         efree (& ra -> z_fun );
103103    }
104104
105105    /* Distributor */ 
106-     if (ra -> z_dist ) {
107-         zval_dtor (ra -> z_dist );
108-         efree (ra -> z_dist );
106+     if (Z_TYPE ( ra -> z_dist )  !=   IS_UNDEF ) {
107+         zval_dtor (& ra -> z_dist );
108+         efree (& ra -> z_dist );
109109    }
110110
111111    /* Delete pur commands */ 
112-     zval_dtor (ra -> z_pure_cmds );
113-     efree (ra -> z_pure_cmds );
112+     zval_dtor (& ra -> z_pure_cmds );
113+     efree (& ra -> z_pure_cmds );
114114
115115    /* Free structure itself */ 
116116    efree (ra );
@@ -515,9 +515,8 @@ PHP_METHOD(RedisArray, _function)
515515		RETURN_FALSE ;
516516	}
517517
518- 	if (ra -> z_fun ) {
519- 		* return_value  =  * ra -> z_fun ;
520- 		zval_copy_ctor (return_value );
518+ 	if (Z_TYPE (ra -> z_fun ) !=  IS_UNDEF ) {
519+ 	    ZVAL_DUP (return_value , & ra -> z_fun );
521520	} else  {
522521		RETURN_NULL ();
523522	}
@@ -537,9 +536,8 @@ PHP_METHOD(RedisArray, _distributor)
537536		RETURN_FALSE ;
538537	}
539538
540- 	if (ra -> z_fun ) {
541- 		* return_value  =  * ra -> z_fun ;
542- 		zval_copy_ctor (return_value );
539+ 	if (Z_TYPE (ra -> z_fun ) !=  IS_UNDEF ) {
540+ 	    ZVAL_DUP (return_value , & ra -> z_fun );
543541	} else  {
544542		RETURN_NULL ();
545543	}
@@ -592,8 +590,7 @@ static void multihost_distribute(INTERNAL_FUNCTION_PARAMETERS, const char *metho
592590		ZVAL_UNDEF (& z_tmp );
593591
594592		/* Call each node in turn */ 
595- 		call_user_function (& redis_ce -> function_table , ra -> redis [i ],
596- 				& z_fun , & z_tmp , 0 , NULL  TSRMLS_CC );
593+ 		call_user_function (& redis_ce -> function_table , & ra -> redis [i ], & z_fun , & z_tmp , 0 , NULL  TSRMLS_CC );
597594
598595		add_assoc_zval (return_value , ra -> hosts [i ], & z_tmp );
599596	}
@@ -664,7 +661,7 @@ PHP_METHOD(RedisArray, keys)
664661	    ZVAL_UNDEF (& z_tmp );
665662
666663	    /* Call KEYS on each node */ 
667- 	    call_user_function (& redis_ce -> function_table , ra -> redis [i ], & z_fun , & z_tmp , 1 , z_args  TSRMLS_CC );
664+ 	    call_user_function (& redis_ce -> function_table , & ra -> redis [i ], & z_fun , & z_tmp , 1 , z_args  TSRMLS_CC );
668665
669666	    /* Add the result for this host */ 
670667	    add_assoc_zval (return_value , ra -> hosts [i ], & z_tmp );
@@ -702,7 +699,7 @@ PHP_METHOD(RedisArray, getOption)
702699		ZVAL_UNDEF (& z_tmp );
703700
704701		/* Call each node in turn */ 
705- 		call_user_function (& redis_ce -> function_table , ra -> redis [i ],
702+ 		call_user_function (& redis_ce -> function_table , & ra -> redis [i ],
706703				& z_fun , & z_tmp , 1 , z_args  TSRMLS_CC );
707704
708705		add_assoc_zval (return_value , ra -> hosts [i ], & z_tmp );
@@ -743,7 +740,7 @@ PHP_METHOD(RedisArray, setOption)
743740		ZVAL_UNDEF (& z_tmp );
744741
745742		/* Call each node in turn */ 
746- 		call_user_function (& redis_ce -> function_table , ra -> redis [i ],
743+ 		call_user_function (& redis_ce -> function_table , & ra -> redis [i ],
747744				& z_fun , & z_tmp , 2 , z_args  TSRMLS_CC );
748745
749746		add_assoc_zval (return_value , ra -> hosts [i ], & z_tmp );
@@ -782,7 +779,7 @@ PHP_METHOD(RedisArray, select)
782779		ZVAL_UNDEF (& z_tmp );
783780
784781		/* Call each node in turn */ 
785- 		call_user_function (& redis_ce -> function_table , ra -> redis [i ],
782+ 		call_user_function (& redis_ce -> function_table , & ra -> redis [i ],
786783				& z_fun , & z_tmp , 1 , z_args  TSRMLS_CC );
787784
788785		add_assoc_zval (return_value , ra -> hosts [i ], & z_tmp );
@@ -908,7 +905,7 @@ PHP_METHOD(RedisArray, mget)
908905		}
909906
910907		/* call MGET on the node */ 
911- 		call_user_function (& redis_ce -> function_table , ra -> redis [n ],
908+ 		call_user_function (& redis_ce -> function_table , & ra -> redis [n ],
912909				& z_fun , & z_ret , 1 , & z_argarray  TSRMLS_CC );
913910
914911		/* cleanup args array */ 
@@ -1034,7 +1031,7 @@ PHP_METHOD(RedisArray, mset)
10341031
10351032		/* prepare call */ 
10361033		ZVAL_STRING (& z_fun , "MSET" );
1037- 		redis_inst  =  ra -> redis [n ];
1034+ 		redis_inst  =  & ra -> redis [n ];
10381035
10391036		/* copy args */ 
10401037		array_init (& z_argarray );
@@ -1061,7 +1058,7 @@ PHP_METHOD(RedisArray, mset)
10611058		}
10621059
10631060		/* call */ 
1064- 		call_user_function (& redis_ce -> function_table , ra -> redis [n ],
1061+ 		call_user_function (& redis_ce -> function_table , & ra -> redis [n ],
10651062				& z_fun , & z_ret , 1 , & z_argarray  TSRMLS_CC );
10661063
10671064		if (ra -> index ) {
@@ -1166,7 +1163,7 @@ PHP_METHOD(RedisArray, del)
11661163	for (n  =  0 ; n  <  ra -> count ; ++ n ) { /* for each node */ 
11671164
11681165		int  found  =  0 ;
1169- 		redis_inst  =  ra -> redis [n ];
1166+ 		redis_inst  =  & ra -> redis [n ];
11701167
11711168		/* copy args */ 
11721169		array_init (& z_argarray );
0 commit comments