Skip to content

Commit 8788f17

Browse files
committed
Revert "Do not use zend_fcall_info_argp() for ticks and shutdown functions"
This reverts commit c4ae0c5cf8c4eae19c99b5681b23d795306b898e.
1 parent 14fa973 commit 8788f17

File tree

1 file changed

+10
-9
lines changed

1 file changed

+10
-9
lines changed

ext/standard/basic_functions.c

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1598,9 +1598,6 @@ PHP_FUNCTION(forward_static_call_array)
15981598
static void fci_addref(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache)
15991599
{
16001600
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-
}
16041601
if (fci_cache->object) {
16051602
GC_ADDREF(fci_cache->object);
16061603
}
@@ -1609,26 +1606,24 @@ static void fci_addref(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache)
16091606
static void fci_release(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache)
16101607
{
16111608
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-
}
16151609
if (fci_cache->object) {
16161610
zend_object_release(fci_cache->object);
16171611
}
1618-
zend_release_fcall_info_cache(fci_cache);
16191612
}
16201613

16211614
void user_shutdown_function_dtor(zval *zv) /* {{{ */
16221615
{
16231616
php_shutdown_function_entry *shutdown_function_entry = Z_PTR_P(zv);
16241617

1618+
zend_fcall_info_args_clear(&shutdown_function_entry->fci, true);
16251619
fci_release(&shutdown_function_entry->fci, &shutdown_function_entry->fci_cache);
16261620
efree(shutdown_function_entry);
16271621
}
16281622
/* }}} */
16291623

16301624
void user_tick_function_dtor(user_tick_function_entry *tick_function_entry) /* {{{ */
16311625
{
1626+
zend_fcall_info_args_clear(&tick_function_entry->fci, true);
16321627
fci_release(&tick_function_entry->fci, &tick_function_entry->fci_cache);
16331628
}
16341629
/* }}} */
@@ -1727,13 +1722,16 @@ PHPAPI void php_free_shutdown_functions(void) /* {{{ */
17271722
PHP_FUNCTION(register_shutdown_function)
17281723
{
17291724
php_shutdown_function_entry entry;
1725+
zval *params = NULL;
1726+
uint32_t param_count = 0;
17301727
bool status;
17311728

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) {
17331730
RETURN_THROWS();
17341731
}
17351732

17361733
fci_addref(&entry.fci, &entry.fci_cache);
1734+
zend_fcall_info_argp(&entry.fci, param_count, params);
17371735

17381736
status = append_user_shutdown_function(&entry);
17391737
ZEND_ASSERT(status);
@@ -2312,13 +2310,16 @@ PHP_FUNCTION(getprotobynumber)
23122310
PHP_FUNCTION(register_tick_function)
23132311
{
23142312
user_tick_function_entry tick_fe;
2313+
zval *params = NULL;
2314+
uint32_t param_count = 0;
23152315

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) {
23172317
RETURN_THROWS();
23182318
}
23192319

23202320
tick_fe.calling = false;
23212321
fci_addref(&tick_fe.fci, &tick_fe.fci_cache);
2322+
zend_fcall_info_argp(&tick_fe.fci, param_count, params);
23222323

23232324
if (!BG(user_tick_functions)) {
23242325
BG(user_tick_functions) = (zend_llist *) emalloc(sizeof(zend_llist));

0 commit comments

Comments
 (0)