@@ -7188,8 +7188,6 @@ static void zend_jit_stop_hot_trace_counters(zend_op_array *op_array)
7188
7188
uint32_t i ;
7189
7189
7190
7190
jit_extension = (zend_jit_op_array_trace_extension * )ZEND_FUNC_INFO (op_array );
7191
- zend_shared_alloc_lock ();
7192
- SHM_UNPROTECT ();
7193
7191
for (i = 0 ; i < op_array -> last ; i ++ ) {
7194
7192
/* Opline with Jit-ed code handler is skipped. */
7195
7193
if (jit_extension -> trace_info [i ].trace_flags &
@@ -7201,8 +7199,6 @@ static void zend_jit_stop_hot_trace_counters(zend_op_array *op_array)
7201
7199
op_array -> opcodes [i ].handler = jit_extension -> trace_info [i ].orig_handler ;
7202
7200
}
7203
7201
}
7204
- SHM_PROTECT ();
7205
- zend_shared_alloc_unlock ();
7206
7202
}
7207
7203
7208
7204
/* Get the tracing op_array. */
@@ -7241,6 +7237,9 @@ static void zend_jit_stop_persistent_script(zend_persistent_script *script)
7241
7237
/* Get all scripts which are accelerated by JIT */
7242
7238
static void zend_jit_stop_counter_handlers (void )
7243
7239
{
7240
+ zend_shared_alloc_lock ();
7241
+ /* mprotect has an extreme overhead, avoid calls to it for every function. */
7242
+ SHM_UNPROTECT ();
7244
7243
for (uint32_t i = 0 ; i < ZCSG (hash ).max_num_entries ; i ++ ) {
7245
7244
zend_accel_hash_entry * cache_entry ;
7246
7245
for (cache_entry = ZCSG (hash ).hash_table [i ]; cache_entry ; cache_entry = cache_entry -> next ) {
@@ -7250,6 +7249,8 @@ static void zend_jit_stop_counter_handlers(void)
7250
7249
zend_jit_stop_persistent_script (script );
7251
7250
}
7252
7251
}
7252
+ SHM_PROTECT ();
7253
+ zend_shared_alloc_unlock ();
7253
7254
}
7254
7255
7255
7256
static void zend_jit_blacklist_root_trace (const zend_op * opline , size_t offset )
0 commit comments