@@ -2622,38 +2622,51 @@ static memcached_return php_memc_do_cache_callback(zval *zmemc_obj, zend_fcall_i
2622
2622
{
2623
2623
char * payload = NULL ;
2624
2624
size_t payload_len = 0 ;
2625
- zval * * params [3 ];
2625
+ zval * * params [4 ];
2626
2626
zval * retval ;
2627
2627
zval * z_key ;
2628
+ zval * z_expiration ;
2629
+
2628
2630
uint32_t flags = 0 ;
2629
2631
memcached_return rc ;
2630
2632
php_memc_t * i_obj ;
2631
2633
memcached_return status = MEMCACHED_SUCCESS ;
2632
2634
int result ;
2633
2635
2634
2636
MAKE_STD_ZVAL (z_key );
2637
+ MAKE_STD_ZVAL (z_expiration );
2635
2638
ZVAL_STRINGL (z_key , key , key_len , 1 );
2636
2639
ZVAL_NULL (value );
2640
+ ZVAL_LONG (z_expiration , 0 );
2637
2641
2638
2642
params [0 ] = & zmemc_obj ;
2639
2643
params [1 ] = & z_key ;
2640
2644
params [2 ] = & value ;
2645
+ params [3 ] = & z_expiration ;
2641
2646
2642
2647
fci -> retval_ptr_ptr = & retval ;
2643
2648
fci -> params = params ;
2644
- fci -> param_count = 3 ;
2649
+ fci -> param_count = sizeof ( params ) / sizeof ( params [ 0 ]) ;
2645
2650
2646
2651
result = zend_call_function (fci , fcc TSRMLS_CC );
2647
2652
if (result == SUCCESS && retval ) {
2648
2653
i_obj = (php_memc_t * ) zend_object_store_get_object (zmemc_obj TSRMLS_CC );
2649
2654
struct memc_obj * m_obj = i_obj -> obj ;
2650
2655
2651
2656
if (zend_is_true (retval )) {
2657
+ time_t expiration ;
2658
+
2659
+ if (Z_TYPE_P (z_expiration ) != IS_LONG ) {
2660
+ convert_to_long (z_expiration );
2661
+ }
2662
+
2663
+ expiration = Z_LVAL_P (z_expiration );
2664
+
2652
2665
payload = php_memc_zval_to_payload (value , & payload_len , & flags , m_obj -> serializer TSRMLS_CC );
2653
2666
if (payload == NULL ) {
2654
2667
status = (memcached_return )MEMC_RES_PAYLOAD_FAILURE ;
2655
2668
} else {
2656
- rc = memcached_set (m_obj -> memc , key , key_len , payload , payload_len , 0 , flags );
2669
+ rc = memcached_set (m_obj -> memc , key , key_len , payload , payload_len , expiration , flags );
2657
2670
if (rc == MEMCACHED_SUCCESS || rc == MEMCACHED_BUFFERED ) {
2658
2671
status = rc ;
2659
2672
}
@@ -2679,6 +2692,7 @@ static memcached_return php_memc_do_cache_callback(zval *zmemc_obj, zend_fcall_i
2679
2692
}
2680
2693
2681
2694
zval_ptr_dtor (& z_key );
2695
+ zval_ptr_dtor (& z_expiration );
2682
2696
2683
2697
return status ;
2684
2698
}
0 commit comments