Fix race condition in zend_runtime_jit(), zend_jit_hot_func() #19971
+9
−5
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.
Fixes GH-19889.
zend_runtime_jit()
prevents concurrent compilation withzend_shared_alloc_lock()
, but this doesn't prevent blocked threads from trying to compile the function again after they acquire the lock.In the case of GH-19889, one of the function entries is compiled with
zend_jit_handler()
, which fails when the op handler has been replaced by a JIT'ed handler.This can be produced with this script:
Fix by marking compiled functions with a new flag
ZEND_FUNC_JITED
, and skipping compilation of marked functions. The same fix is applied tozend_jit_hot_func()
.