Skip to content

Commit 1359a52

Browse files
committed
Rename zend_error_notify APIs to zend_observer_error*
1 parent 8f342ad commit 1359a52

File tree

7 files changed

+34
-49
lines changed

7 files changed

+34
-49
lines changed

UPGRADING.INTERNALS

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -370,19 +370,19 @@ PHP 8.0 INTERNALS UPGRADE NOTES
370370

371371
u. Instead of overwriting zend_error_cb extensions with debugging, monitoring
372372
use-cases catching Errors/Exceptions are strongly encouraged to use
373-
the new error notification API instead.
373+
the new error observer API instead.
374374

375-
Error notification callbacks are guaranteed to be called regardless of
375+
Error observering callbacks are guaranteed to be called regardless of
376376
the users error_reporting setting or userland error handler return values.
377377

378-
Register notification callbacks during MINIT of an extension:
378+
Register observer callbacks during MINIT of an extension:
379379

380-
void my_error_notify_cb(int type,
380+
void my_error_observer_cb(int type,
381381
const char *error_filename,
382382
uint32_t error_lineno,
383383
zend_string *message) {
384384
}
385-
zend_register_error_notify_callback(my_error_notify_cb);
385+
zend_observer_error_register(my_error_observer_cb);
386386

387387
v. The following APIs have been removed from the Zend Engine:
388388
- zend_ts_hash_init_ex(), drop the last argument and use zend_ts_hash_init() instead

Zend/zend.c

Lines changed: 2 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,6 @@ ZEND_TSRMLS_CACHE_DEFINE()
6262
ZEND_API zend_utility_values zend_uv;
6363
ZEND_API zend_bool zend_dtrace_enabled;
6464

65-
zend_llist zend_error_notify_callbacks;
66-
6765
/* version information */
6866
static char *zend_version_info;
6967
static uint32_t zend_version_info_length;
@@ -832,7 +830,6 @@ void zend_startup(zend_utility_functions *utility_functions) /* {{{ */
832830

833831
zend_startup_strtod();
834832
zend_startup_extensions_mechanism();
835-
zend_startup_error_notify_callbacks();
836833

837834
/* Set up utility functions and values */
838835
zend_error_cb = utility_functions->error_function;
@@ -865,7 +862,7 @@ void zend_startup(zend_utility_functions *utility_functions) /* {{{ */
865862
zend_execute_ex = dtrace_execute_ex;
866863
zend_execute_internal = dtrace_execute_internal;
867864

868-
zend_register_error_notify_callback(dtrace_error_notify_cb);
865+
zend_observer_error_register(dtrace_error_notify_cb);
869866
} else {
870867
zend_compile_file = compile_file;
871868
zend_execute_ex = execute_ex;
@@ -1093,7 +1090,6 @@ void zend_shutdown(void) /* {{{ */
10931090
zend_hash_destroy(GLOBAL_AUTO_GLOBALS_TABLE);
10941091
free(GLOBAL_AUTO_GLOBALS_TABLE);
10951092

1096-
zend_shutdown_error_notify_callbacks();
10971093
zend_shutdown_extensions();
10981094
free(zend_version_info);
10991095

@@ -1329,7 +1325,7 @@ static ZEND_COLD void zend_error_impl(
13291325
}
13301326
}
13311327

1332-
zend_error_notify_all_callbacks(type, error_filename, error_lineno, message);
1328+
zend_observer_error_notify(type, error_filename, error_lineno, message);
13331329

13341330
/* if we don't have a user defined error handler */
13351331
if (Z_TYPE(EG(user_error_handler)) == IS_UNDEF
@@ -1792,29 +1788,3 @@ ZEND_API void zend_map_ptr_extend(size_t last)
17921788
CG(map_ptr_last) = last;
17931789
}
17941790
}
1795-
1796-
void zend_startup_error_notify_callbacks(void)
1797-
{
1798-
zend_llist_init(&zend_error_notify_callbacks, sizeof(zend_error_notify_cb), NULL, 1);
1799-
}
1800-
1801-
void zend_shutdown_error_notify_callbacks(void)
1802-
{
1803-
zend_llist_destroy(&zend_error_notify_callbacks);
1804-
}
1805-
1806-
ZEND_API void zend_register_error_notify_callback(zend_error_notify_cb cb)
1807-
{
1808-
zend_llist_add_element(&zend_error_notify_callbacks, &cb);
1809-
}
1810-
1811-
void zend_error_notify_all_callbacks(int type, const char *error_filename, uint32_t error_lineno, zend_string *message)
1812-
{
1813-
zend_llist_element *element;
1814-
zend_error_notify_cb callback;
1815-
1816-
for (element = zend_error_notify_callbacks.head; element; element = element->next) {
1817-
callback = *(zend_error_notify_cb *) (element->data);
1818-
callback(type, error_filename, error_lineno, message);
1819-
}
1820-
}

Zend/zend.h

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -350,15 +350,6 @@ ZEND_API void zend_save_error_handling(zend_error_handling *current);
350350
ZEND_API void zend_replace_error_handling(zend_error_handling_t error_handling, zend_class_entry *exception_class, zend_error_handling *current);
351351
ZEND_API void zend_restore_error_handling(zend_error_handling *saved);
352352

353-
typedef void (*zend_error_notify_cb)(int type, const char *error_filename, uint32_t error_lineno, zend_string *message);
354-
355-
BEGIN_EXTERN_C()
356-
ZEND_API void zend_register_error_notify_callback(zend_error_notify_cb callback);
357-
void zend_startup_error_notify_callbacks(void);
358-
void zend_shutdown_error_notify_callbacks(void);
359-
void zend_error_notify_all_callbacks(int type, const char *error_filename, uint32_t error_lineno, zend_string *message);
360-
END_EXTERN_C()
361-
362353
#define DEBUG_BACKTRACE_PROVIDE_OBJECT (1<<0)
363354
#define DEBUG_BACKTRACE_IGNORE_ARGS (1<<1)
364355

Zend/zend_exceptions.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include "zend_dtrace.h"
2929
#include "zend_smart_str.h"
3030
#include "zend_exceptions_arginfo.h"
31+
#include "zend_observer.h"
3132

3233
ZEND_API zend_class_entry *zend_ce_throwable;
3334
ZEND_API zend_class_entry *zend_ce_exception;
@@ -900,7 +901,7 @@ static void zend_error_va(int type, const char *file, uint32_t lineno, const cha
900901
va_list args;
901902
va_start(args, format);
902903
zend_string *message = zend_vstrpprintf(0, format, args);
903-
zend_error_notify_all_callbacks(type, file, lineno, message);
904+
zend_observer_error_notify(type, file, lineno, message);
904905
zend_error_cb(type, file, lineno, message);
905906
zend_string_release(message);
906907
va_end(args);
@@ -923,7 +924,7 @@ ZEND_API ZEND_COLD zend_result zend_exception_error(zend_object *ex, int severit
923924
zend_long line = zval_get_long(GET_PROPERTY_SILENT(&exception, ZEND_STR_LINE));
924925
int type = (ce_exception == zend_ce_parse_error ? E_PARSE : E_COMPILE_ERROR) | E_DONT_BAIL;
925926

926-
zend_error_notify_all_callbacks(type, ZSTR_VAL(file), line, message);
927+
zend_observer_error_notify(type, ZSTR_VAL(file), line, message);
927928
zend_error_cb(type, ZSTR_VAL(file), line, message);
928929

929930
zend_string_release_ex(file, 0);

Zend/zend_observer.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
#include "zend_vm.h"
2525

2626
zend_llist zend_observers_fcall_list;
27+
zend_llist zend_observer_error_callbacks;
28+
2729
int zend_observer_fcall_op_array_extension = -1;
2830

2931
ZEND_TLS zend_arena *fcall_handlers_arena = NULL;
@@ -58,6 +60,7 @@ ZEND_API void zend_observer_fcall_register(zend_observer_fcall_init init) {
5860
// Called by engine before MINITs
5961
ZEND_API void zend_observer_startup(void) {
6062
zend_llist_init(&zend_observers_fcall_list, sizeof(zend_observer_fcall_init), NULL, 1);
63+
zend_llist_init(&zend_observer_error_callbacks, sizeof(zend_observer_error_cb), NULL, 1);
6164
}
6265

6366
ZEND_API void zend_observer_activate(void) {
@@ -74,6 +77,7 @@ ZEND_API void zend_observer_deactivate(void) {
7477

7578
ZEND_API void zend_observer_shutdown(void) {
7679
zend_llist_destroy(&zend_observers_fcall_list);
80+
zend_llist_destroy(&zend_observer_error_callbacks);
7781
}
7882

7983
ZEND_API void zend_observer_fcall_install(zend_function *function) {
@@ -157,4 +161,18 @@ ZEND_API void zend_observe_fcall_end(
157161
}
158162
}
159163

164+
ZEND_API void zend_observer_error_register(zend_observer_error_cb cb)
165+
{
166+
zend_llist_add_element(&zend_observer_error_callbacks, &cb);
167+
}
168+
169+
void zend_observer_error_notify(int type, const char *error_filename, uint32_t error_lineno, zend_string *message)
170+
{
171+
zend_llist_element *element;
172+
zend_observer_error_cb callback;
160173

174+
for (element = zend_observer_error_callbacks.head; element; element = element->next) {
175+
callback = *(zend_observer_error_cb *) (element->data);
176+
callback(type, error_filename, error_lineno, message);
177+
}
178+
}

Zend/zend_observer.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,11 @@ ZEND_API zend_always_inline void zend_observer_maybe_fcall_call_end(
110110
}
111111
}
112112

113+
typedef void (*zend_observer_error_cb)(int type, const char *error_filename, uint32_t error_lineno, zend_string *message);
114+
115+
ZEND_API void zend_observer_error_register(zend_observer_error_cb callback);
116+
void zend_observer_error_notify(int type, const char *error_filename, uint32_t error_lineno, zend_string *message);
117+
113118
END_EXTERN_C()
114119

115120
#endif /* ZEND_OBSERVER_H */

main/main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2045,7 +2045,7 @@ int php_module_startup(sapi_module_struct *sf, zend_module_entry *additional_mod
20452045
zend_update_current_locale();
20462046

20472047
#if ZEND_DEBUG
2048-
zend_register_error_notify_callback(report_zend_debug_error_notify_cb);
2048+
zend_observer_error_register(report_zend_debug_error_notify_cb);
20492049
#endif
20502050

20512051
#if HAVE_TZSET

0 commit comments

Comments
 (0)