convert ZEND_INIT_FCALL to ZEND_INIT_FCALL_BY_NAME#356
Merged
Conversation
ZEND_INIT_FCALL to ZEND_INIT_DYNAMIC_CALLZEND_INIT_FCALL to ZEND_INIT_FCALL_BY_NAME
realFlowControl
force-pushed
the
florian/init-fcall-to-dynamic-call
branch
2 times, most recently
from
December 16, 2025 12:27
71b03e4 to
422955f
Compare
realFlowControl
force-pushed
the
florian/init-fcall-to-dynamic-call
branch
from
December 16, 2025 12:32
422955f to
4049900
Compare
realFlowControl
marked this pull request as ready for review
December 17, 2025 20:12
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR migrates
ZEND_INIT_FCALLopcodes toZEND_INIT_FCALL_BY_NAMEopcodes when copying the closure given to\parallel\run()or\parallel\Runtime::run()to the internal cache (in order to copy it to the thread it gets executed on). This is done becauseZEND_INIT_FCALLis an optimised opcode for functions that are visible to the compiler at compile time and it does not do and runtime checks anymore and instead segfaults.AFAIK this optimisation only triggers if the code looks something like this:
This code is segfaulting (it won't if you
\parallel\bootstrap("file_that_provides_foo_function.php");.This PR make sure we do not segfault, but instead PHP raises a
Fatal error: Call to undefined function foo() ...instead.Fixes #317 for cases where OPcache is disabled