diff --git a/Zend/zend_observer.c b/Zend/zend_observer.c index 80d1fbd1876..f699ea714d8 100644 --- a/Zend/zend_observer.c +++ b/Zend/zend_observer.c @@ -301,7 +301,7 @@ ZEND_API void zend_observer_function_declared_register(zend_observer_function_de zend_llist_add_element(&zend_observer_function_declared_callbacks, &cb); } -ZEND_API void ZEND_FASTCALL zend_observer_function_declared_notify(zend_op_array *op_array, zend_string *name) +ZEND_API void ZEND_FASTCALL _zend_observer_function_declared_notify(zend_op_array *op_array, zend_string *name) { if (CG(compiler_options) & ZEND_COMPILE_IGNORE_OBSERVER) { return; @@ -319,7 +319,7 @@ ZEND_API void zend_observer_class_linked_register(zend_observer_class_linked_cb zend_llist_add_element(&zend_observer_class_linked_callbacks, &cb); } -ZEND_API void ZEND_FASTCALL zend_observer_class_linked_notify(zend_class_entry *ce, zend_string *name) +ZEND_API void ZEND_FASTCALL _zend_observer_class_linked_notify(zend_class_entry *ce, zend_string *name) { if (CG(compiler_options) & ZEND_COMPILE_IGNORE_OBSERVER) { return; @@ -337,7 +337,7 @@ ZEND_API void zend_observer_error_register(zend_observer_error_cb cb) zend_llist_add_element(&zend_observer_error_callbacks, &cb); } -void zend_observer_error_notify(int type, zend_string *error_filename, uint32_t error_lineno, zend_string *message) +ZEND_API void _zend_observer_error_notify(int type, zend_string *error_filename, uint32_t error_lineno, zend_string *message) { for (zend_llist_element *element = zend_observer_error_callbacks.head; element; element = element->next) { zend_observer_error_cb callback = *(zend_observer_error_cb *) (element->data); diff --git a/Zend/zend_observer.h b/Zend/zend_observer.h index 0cd660db7e5..fc4d9a62c89 100644 --- a/Zend/zend_observer.h +++ b/Zend/zend_observer.h @@ -84,17 +84,34 @@ ZEND_API void ZEND_FASTCALL zend_observer_fcall_end( ZEND_API void zend_observer_fcall_end_all(void); typedef void (*zend_observer_function_declared_cb)(zend_op_array *op_array, zend_string *name); -typedef void (*zend_observer_class_linked_cb)(zend_class_entry *ce, zend_string *name); ZEND_API void zend_observer_function_declared_register(zend_observer_function_declared_cb cb); -ZEND_API void ZEND_FASTCALL zend_observer_function_declared_notify(zend_op_array *op_array, zend_string *name); +ZEND_API void ZEND_FASTCALL _zend_observer_function_declared_notify(zend_op_array *op_array, zend_string *name); +static inline void zend_observer_function_declared_notify(zend_op_array *op_array, zend_string *name) { + if (UNEXPECTED(zend_observer_function_declared_observed)) { + _zend_observer_function_declared_notify(op_array, name); + } +} + +typedef void (*zend_observer_class_linked_cb)(zend_class_entry *ce, zend_string *name); + ZEND_API void zend_observer_class_linked_register(zend_observer_class_linked_cb cb); -ZEND_API void ZEND_FASTCALL zend_observer_class_linked_notify(zend_class_entry *ce, zend_string *name); +ZEND_API void ZEND_FASTCALL _zend_observer_class_linked_notify(zend_class_entry *ce, zend_string *name); +static inline void zend_observer_class_linked_notify(zend_class_entry *ce, zend_string *name) { + if (UNEXPECTED(zend_observer_class_linked_observed)) { + _zend_observer_class_linked_notify(ce, name); + } +} typedef void (*zend_observer_error_cb)(int type, zend_string *error_filename, uint32_t error_lineno, zend_string *message); ZEND_API void zend_observer_error_register(zend_observer_error_cb callback); -void zend_observer_error_notify(int type, zend_string *error_filename, uint32_t error_lineno, zend_string *message); +ZEND_API void _zend_observer_error_notify(int type, zend_string *error_filename, uint32_t error_lineno, zend_string *message); +static inline void zend_observer_error_notify(int type, zend_string *error_filename, uint32_t error_lineno, zend_string *message) { + if (UNEXPECTED(zend_observer_errors_observed)) { + _zend_observer_error_notify(type, error_filename, error_lineno, message); + } +} typedef void (*zend_observer_fiber_init_handler)(zend_fiber_context *initializing); typedef void (*zend_observer_fiber_switch_handler)(zend_fiber_context *from, zend_fiber_context *to); diff --git a/ext/opcache/zend_accelerator_util_funcs.c b/ext/opcache/zend_accelerator_util_funcs.c index f0fb9cc56b9..8363fe247d8 100644 --- a/ext/opcache/zend_accelerator_util_funcs.c +++ b/ext/opcache/zend_accelerator_util_funcs.c @@ -160,7 +160,7 @@ static void zend_accel_function_hash_copy(HashTable *target, HashTable *source) } _zend_hash_append_ptr_ex(target, p->key, Z_PTR(p->val), 1); if (UNEXPECTED(call_observers) && *ZSTR_VAL(p->key)) { // if not rtd key - zend_observer_function_declared_notify(Z_PTR(p->val), p->key); + _zend_observer_function_declared_notify(Z_PTR(p->val), p->key); } } target->nInternalPointer = 0; @@ -224,19 +224,18 @@ static void zend_accel_class_hash_copy(HashTable *target, HashTable *source) } } else { zend_class_entry *ce = Z_PTR(p->val); - t = _zend_hash_append_ptr_ex(target, p->key, Z_PTR(p->val), 1); + _zend_hash_append_ptr_ex(target, p->key, Z_PTR(p->val), 1); if ((ce->ce_flags & ZEND_ACC_LINKED) && ZSTR_HAS_CE_CACHE(ce->name) && ZSTR_VAL(p->key)[0]) { ZSTR_SET_CE_CACHE_EX(ce->name, ce, 0); if (UNEXPECTED(call_observers)) { - zend_observer_class_linked_notify(ce, p->key); + _zend_observer_class_linked_notify(ce, p->key); } } } } target->nInternalPointer = 0; - return; } void zend_accel_build_delayed_early_binding_list(zend_persistent_script *persistent_script)