@@ -1598,9 +1598,6 @@ PHP_FUNCTION(forward_static_call_array)
1598
1598
static void fci_addref (zend_fcall_info * fci , zend_fcall_info_cache * fci_cache )
1599
1599
{
1600
1600
Z_TRY_ADDREF (fci -> function_name );
1601
- for (uint32_t i = 0 ; i < fci -> param_count ; ++ i ) {
1602
- Z_TRY_ADDREF (fci -> params [i ]);
1603
- }
1604
1601
if (fci_cache -> object ) {
1605
1602
GC_ADDREF (fci_cache -> object );
1606
1603
}
@@ -1609,26 +1606,24 @@ static void fci_addref(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache)
1609
1606
static void fci_release (zend_fcall_info * fci , zend_fcall_info_cache * fci_cache )
1610
1607
{
1611
1608
zval_ptr_dtor (& fci -> function_name );
1612
- for (uint32_t i = 0 ; i < fci -> param_count ; ++ i ) {
1613
- zval_ptr_dtor (& fci -> params [i ]);
1614
- }
1615
1609
if (fci_cache -> object ) {
1616
1610
zend_object_release (fci_cache -> object );
1617
1611
}
1618
- zend_release_fcall_info_cache (fci_cache );
1619
1612
}
1620
1613
1621
1614
void user_shutdown_function_dtor (zval * zv ) /* {{{ */
1622
1615
{
1623
1616
php_shutdown_function_entry * shutdown_function_entry = Z_PTR_P (zv );
1624
1617
1618
+ zend_fcall_info_args_clear (& shutdown_function_entry -> fci , true);
1625
1619
fci_release (& shutdown_function_entry -> fci , & shutdown_function_entry -> fci_cache );
1626
1620
efree (shutdown_function_entry );
1627
1621
}
1628
1622
/* }}} */
1629
1623
1630
1624
void user_tick_function_dtor (user_tick_function_entry * tick_function_entry ) /* {{{ */
1631
1625
{
1626
+ zend_fcall_info_args_clear (& tick_function_entry -> fci , true);
1632
1627
fci_release (& tick_function_entry -> fci , & tick_function_entry -> fci_cache );
1633
1628
}
1634
1629
/* }}} */
@@ -1727,13 +1722,16 @@ PHPAPI void php_free_shutdown_functions(void) /* {{{ */
1727
1722
PHP_FUNCTION (register_shutdown_function )
1728
1723
{
1729
1724
php_shutdown_function_entry entry ;
1725
+ zval * params = NULL ;
1726
+ uint32_t param_count = 0 ;
1730
1727
bool status ;
1731
1728
1732
- if (zend_parse_parameters (ZEND_NUM_ARGS (), "f*" , & entry .fci , & entry .fci_cache , & entry . fci . params , & entry . fci . param_count ) == FAILURE ) {
1729
+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "f*" , & entry .fci , & entry .fci_cache , & params , & param_count ) == FAILURE ) {
1733
1730
RETURN_THROWS ();
1734
1731
}
1735
1732
1736
1733
fci_addref (& entry .fci , & entry .fci_cache );
1734
+ zend_fcall_info_argp (& entry .fci , param_count , params );
1737
1735
1738
1736
status = append_user_shutdown_function (& entry );
1739
1737
ZEND_ASSERT (status );
@@ -2312,13 +2310,16 @@ PHP_FUNCTION(getprotobynumber)
2312
2310
PHP_FUNCTION (register_tick_function )
2313
2311
{
2314
2312
user_tick_function_entry tick_fe ;
2313
+ zval * params = NULL ;
2314
+ uint32_t param_count = 0 ;
2315
2315
2316
- if (zend_parse_parameters (ZEND_NUM_ARGS (), "f*" , & tick_fe .fci , & tick_fe .fci_cache , & tick_fe . fci . params , & tick_fe . fci . param_count ) == FAILURE ) {
2316
+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "f*" , & tick_fe .fci , & tick_fe .fci_cache , & params , & param_count ) == FAILURE ) {
2317
2317
RETURN_THROWS ();
2318
2318
}
2319
2319
2320
2320
tick_fe .calling = false;
2321
2321
fci_addref (& tick_fe .fci , & tick_fe .fci_cache );
2322
+ zend_fcall_info_argp (& tick_fe .fci , param_count , params );
2322
2323
2323
2324
if (!BG (user_tick_functions )) {
2324
2325
BG (user_tick_functions ) = (zend_llist * ) emalloc (sizeof (zend_llist ));
0 commit comments