@@ -382,7 +382,7 @@ static zend_bool s_invoke_cache_callback(zval *zobject, zend_fcall_info *fci, ze
382
382
typedef zend_bool (* php_memc_result_apply_fn )(php_memc_object_t * intern , zend_string * key , zval * value , zval * cas , uint32_t flags , void * context );
383
383
384
384
static
385
- memcached_return php_memc_result_apply (php_memc_object_t * intern , php_memc_result_apply_fn result_apply_fn , void * context );
385
+ memcached_return php_memc_result_apply (php_memc_object_t * intern , php_memc_result_apply_fn result_apply_fn , zend_bool fetch_delay , void * context );
386
386
387
387
static
388
388
zend_bool php_memc_mget_apply (php_memc_object_t * intern , zend_string * server_key ,
@@ -579,7 +579,7 @@ uint64_t s_zval_to_uint64 (zval *cas)
579
579
****************************************/
580
580
581
581
static
582
- memcached_return php_memc_result_apply (php_memc_object_t * intern , php_memc_result_apply_fn result_apply_fn , void * context )
582
+ memcached_return php_memc_result_apply (php_memc_object_t * intern , php_memc_result_apply_fn result_apply_fn , zend_bool fetch_delay , void * context )
583
583
{
584
584
memcached_result_st result , * result_ptr ;
585
585
memcached_return rc , status = MEMCACHED_SUCCESS ;
@@ -599,7 +599,7 @@ memcached_return php_memc_result_apply(php_memc_object_t *intern, php_memc_resul
599
599
}
600
600
else {
601
601
zend_string * key ;
602
- zval zv_value , zv_cas ;
602
+ zval val , zcas ;
603
603
zend_bool retval ;
604
604
605
605
uint64_t cas ;
@@ -608,7 +608,7 @@ memcached_return php_memc_result_apply(php_memc_object_t *intern, php_memc_resul
608
608
const char * res_key ;
609
609
size_t res_key_len ;
610
610
611
- if (!s_memcached_result_to_zval (intern -> memc , & result , & zv_value )) {
611
+ if (!s_memcached_result_to_zval (intern -> memc , & result , & val )) {
612
612
if (EG (exception )) {
613
613
status = MEMC_RES_PAYLOAD_FAILURE ;
614
614
memcached_quit (intern -> memc );
@@ -623,19 +623,21 @@ memcached_return php_memc_result_apply(php_memc_object_t *intern, php_memc_resul
623
623
cas = memcached_result_cas (& result );
624
624
flags = memcached_result_flags (& result );
625
625
626
- s_uint64_to_zval (& zv_cas , cas );
626
+ s_uint64_to_zval (& zcas , cas );
627
627
628
628
key = zend_string_init (res_key , res_key_len , 0 );
629
- retval = result_apply_fn (intern , key , & zv_value , & zv_cas , flags , context );
629
+ retval = result_apply_fn (intern , key , & val , & zcas , flags , context );
630
630
631
- zend_string_release (key );
632
- zval_ptr_dtor (& zv_value );
633
- zval_ptr_dtor (& zv_cas );
631
+ zend_string_release (key );
632
+ zval_ptr_dtor (& val );
633
+ zval_ptr_dtor (& zcas );
634
634
635
635
/* Stop iterating on false */
636
636
if (!retval ) {
637
- /* Make sure we clear our results */
638
- while (memcached_fetch_result (intern -> memc , & result , & rc )) {}
637
+ if (!fetch_delay ) {
638
+ /* Make sure we clear our results */
639
+ while (memcached_fetch_result (intern -> memc , & result , & rc )) {}
640
+ }
639
641
break ;
640
642
}
641
643
}
@@ -692,7 +694,7 @@ zend_bool php_memc_mget_apply(php_memc_object_t *intern, zend_string *server_key
692
694
return 1 ;
693
695
}
694
696
695
- status = php_memc_result_apply (intern , result_apply_fn , context );
697
+ status = php_memc_result_apply (intern , result_apply_fn , 0 , context );
696
698
697
699
if (s_memc_status_handle_result_code (intern , status ) == FAILURE ) {
698
700
return 0 ;
@@ -1543,8 +1545,11 @@ void s_create_result_array(zend_string *key, zval *value, zval *cas, uint32_t fl
1543
1545
add_assoc_str_ex (return_value , ZEND_STRL ("key" ), zend_string_copy (key ));
1544
1546
add_assoc_zval_ex (return_value , ZEND_STRL ("value" ), value );
1545
1547
1546
- add_assoc_zval_ex (return_value , ZEND_STRL ("cas" ), cas );
1547
- add_assoc_long_ex (return_value , ZEND_STRL ("flags" ), MEMC_VAL_GET_USER_FLAGS (flags ));
1548
+ if (Z_LVAL_P (cas )) {
1549
+ /* BC compatible */
1550
+ add_assoc_zval_ex (return_value , ZEND_STRL ("cas" ), cas );
1551
+ add_assoc_long_ex (return_value , ZEND_STRL ("flags" ), MEMC_VAL_GET_USER_FLAGS (flags ));
1552
+ }
1548
1553
}
1549
1554
1550
1555
static
@@ -1648,7 +1653,7 @@ PHP_METHOD(Memcached, fetch)
1648
1653
s_memc_set_status (intern , MEMCACHED_SUCCESS , 0 );
1649
1654
1650
1655
array_init (return_value );
1651
- status = php_memc_result_apply (intern , s_fetch_apply , return_value );
1656
+ status = php_memc_result_apply (intern , s_fetch_apply , 1 , return_value );
1652
1657
1653
1658
if (s_memc_status_handle_result_code (intern , status ) == FAILURE ) {
1654
1659
zval_ptr_dtor (return_value );
@@ -1685,7 +1690,7 @@ PHP_METHOD(Memcached, fetchAll)
1685
1690
s_memc_set_status (intern , MEMCACHED_SUCCESS , 0 );
1686
1691
1687
1692
array_init (return_value );
1688
- status = php_memc_result_apply (intern , s_fetch_all_apply , return_value );
1693
+ status = php_memc_result_apply (intern , s_fetch_all_apply , 0 , return_value );
1689
1694
1690
1695
if (s_memc_status_handle_result_code (intern , status ) == FAILURE ) {
1691
1696
zval_dtor (return_value );
0 commit comments