Wrap observer notify functions into inlined enabled checks

Signed-off-by: Bob Weinand <bobwei9@hotmail.com>
This commit is contained in:
Bob Weinand 2022-08-23 14:33:29 +02:00
parent bf427b732a
commit 396b2aab85
3 changed files with 27 additions and 11 deletions

View file

@ -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_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) { if (CG(compiler_options) & ZEND_COMPILE_IGNORE_OBSERVER) {
return; 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_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) { if (CG(compiler_options) & ZEND_COMPILE_IGNORE_OBSERVER) {
return; 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); 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) { 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); zend_observer_error_cb callback = *(zend_observer_error_cb *) (element->data);

View file

@ -84,17 +84,34 @@ ZEND_API void ZEND_FASTCALL zend_observer_fcall_end(
ZEND_API void zend_observer_fcall_end_all(void); 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_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_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_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); 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); 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_init_handler)(zend_fiber_context *initializing);
typedef void (*zend_observer_fiber_switch_handler)(zend_fiber_context *from, zend_fiber_context *to); typedef void (*zend_observer_fiber_switch_handler)(zend_fiber_context *from, zend_fiber_context *to);

View file

@ -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); _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 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; target->nInternalPointer = 0;
@ -224,19 +224,18 @@ static void zend_accel_class_hash_copy(HashTable *target, HashTable *source)
} }
} else { } else {
zend_class_entry *ce = Z_PTR(p->val); 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) if ((ce->ce_flags & ZEND_ACC_LINKED)
&& ZSTR_HAS_CE_CACHE(ce->name) && ZSTR_HAS_CE_CACHE(ce->name)
&& ZSTR_VAL(p->key)[0]) { && ZSTR_VAL(p->key)[0]) {
ZSTR_SET_CE_CACHE_EX(ce->name, ce, 0); ZSTR_SET_CE_CACHE_EX(ce->name, ce, 0);
if (UNEXPECTED(call_observers)) { if (UNEXPECTED(call_observers)) {
zend_observer_class_linked_notify(ce, p->key); _zend_observer_class_linked_notify(ce, p->key);
} }
} }
} }
} }
target->nInternalPointer = 0; target->nInternalPointer = 0;
return;
} }
void zend_accel_build_delayed_early_binding_list(zend_persistent_script *persistent_script) void zend_accel_build_delayed_early_binding_list(zend_persistent_script *persistent_script)