-
Notifications
You must be signed in to change notification settings - Fork 7.9k
Open
@rcmcdonald91
Description
Description
I would expect the the execution context to be restored following the PHP_EMBED_END_BLOCK()
macro, but this doesn't seem to be the case for signal handlers.
here is a toy function to call a php function from a specified file:
/* Early work to call a php function from a specified script file */ void call_php_function(char *file_name, char *function_name) { zend_file_handle file_handle; zval retval = {0}; zend_fcall_info fci = {0}; zend_fcall_info_cache fci_cache = {0}; sigset_t oldsigset; struct sigaction oldsigaction[32] = {0,}; some_signal_save_function(&oldsigset, oldsigaction); PHP_EMBED_START_BLOCK(0, NULL) zend_stream_init_filename(&file_handle, file_name); php_execute_script(&file_handle); ZVAL_STRING(&fci.function_name, function_name); fci.size = sizeof fci; fci.retval = &retval; zend_call_function(&fci, &fci_cache); PHP_EMBED_END_BLOCK() some_signal_restore_function(&oldsigset, oldsigaction); }
Without the signal save/restore wrapping the embed block, the zend_signal_handler and defer handler is still handling the dispatching of signals, which is likely not what a user would want once outside an embed block.
PHP Version
7.4.27
Operating System
No response