Commit 684cf7e6c47 for php
commit 684cf7e6c47c2266532c5faa72909778f9e1744e
Merge: 85a8601e684 b015e2ae499
Author: Ilia Alshanetsky <ilia@ilia.ws>
Date: Sun Sep 27 12:51:08 2026 -0400
Merge branch 'PHP-8.6'
* PHP-8.6:
ext/ffi: Hold a reference to the callable of an FFI callback
diff --cc ext/ffi/ffi.c
index 518a9d9c47f,691af066d5b..37a0a215262
--- a/ext/ffi/ffi.c
+++ b/ext/ffi/ffi.c
@@@ -959,17 -951,14 +951,12 @@@ static void zend_ffi_callback_trampolin
} ZEND_HASH_FOREACH_END();
}
- ZVAL_UNDEF(&retval);
- if (zend_call_function(&fci, &callback_data->fcc) != SUCCESS) {
- zend_throw_error(zend_ffi_exception_ce, "Cannot call callback");
- }
+ zend_call_known_fcc(&callback_data->fcc, &retval, callback_data->arg_count, params, NULL);
-- if (callback_data->arg_count) {
-- for (uint32_t n = 0; n < callback_data->arg_count; n++) {
- zval_ptr_dtor(&fci.params[n]);
- zval_ptr_dtor(¶ms[n]);
-- }
++ for (uint32_t n = 0; n < callback_data->arg_count; n++) {
++ zval_ptr_dtor(¶ms[n]);
}
- free_alloca(fci.params, use_heap);
+ free_alloca(params, use_heap);
if (EG(exception)) {
zend_error_noreturn(E_ERROR, "Throwing from FFI callbacks is not allowed");