Skip to content

Commit

Permalink
Fix GH-16851: JIT_G(enabled) not set correctly on other threads
Browse files Browse the repository at this point in the history
There doesn't seem to be a thread post-startup hook that runs after
zend_startup_cb() that could be used for this

this fix is similar to accel_startup_ok() as seen here: https://github.com/php/php-src/blob/fc1db70f106525e81f9a24539340b7cf2e82e844/ext/opcache/ZendAccelerator.c#L2631-L2634

Closes GH-16853.
  • Loading branch information
dktapps authored and cmb69 committed Nov 20, 2024
1 parent 3656a84 commit ff3b4ec
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 0 deletions.
2 changes: 2 additions & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ PHP NEWS
- Opcache:
. Fixed bug GH-16770 (Tracing JIT type mismatch when returning UNDEF).
(nielsdos, Dmitry)
. Fixed bug GH-16851 (JIT_G(enabled) not set correctly on other threads).
(dktapps)

- OpenSSL:
. Prevent unexpected array entry conversion when reading key. (nielsdos)
Expand Down
2 changes: 2 additions & 0 deletions ext/opcache/ZendAccelerator.c
Original file line number Diff line number Diff line change
Expand Up @@ -3283,6 +3283,8 @@ static zend_result accel_post_startup(void)
if (JIT_G(buffer_size) != 0) {
zend_accel_error(ACCEL_LOG_WARNING, "Could not enable JIT!");
}
} else {
zend_jit_startup_ok = true;
}
}
#endif
Expand Down
9 changes: 9 additions & 0 deletions ext/opcache/jit/zend_jit.c
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,8 @@ typedef struct _zend_jit_stub {
#define JIT_STUB(name, offset, adjustment) \
{JIT_STUB_PREFIX #name, zend_jit_ ## name ## _stub, offset, adjustment}

bool zend_jit_startup_ok = false;

zend_ulong zend_jit_profile_counter = 0;
int zend_jit_profile_counter_rid = -1;

Expand Down Expand Up @@ -5096,6 +5098,13 @@ static void zend_jit_reset_counters(void)

ZEND_EXT_API void zend_jit_activate(void)
{
#ifdef ZTS
if (!zend_jit_startup_ok) {
JIT_G(enabled) = 0;
JIT_G(on) = 0;
return;
}
#endif
zend_jit_profile_counter = 0;
if (JIT_G(on)) {
if (JIT_G(trigger) == ZEND_JIT_ON_HOT_COUNTERS) {
Expand Down
2 changes: 2 additions & 0 deletions ext/opcache/jit/zend_jit.h
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,8 @@ typedef struct _zend_jit_trace_rec zend_jit_trace_rec;
typedef struct _zend_jit_trace_stack_frame zend_jit_trace_stack_frame;
typedef struct _sym_node zend_sym_node;

extern bool zend_jit_startup_ok;

typedef struct _zend_jit_globals {
bool enabled;
bool on;
Expand Down

0 comments on commit ff3b4ec

Please sign in to comment.