diff --git a/NEWS b/NEWS index 366cb537462..02a2ba73744 100644 --- a/NEWS +++ b/NEWS @@ -2,4 +2,7 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? ????, PHP 8.2.0alpha1 +- Core: + . Fixed bug #81380 (Observer may not be initialized properly). (krakjoe) + <<< NOTE: Insert NEWS from last stable release here prior to actual release! >>> diff --git a/Zend/zend_observer.c b/Zend/zend_observer.c index 84a36f6db01..35958aeac5a 100644 --- a/Zend/zend_observer.c +++ b/Zend/zend_observer.c @@ -44,11 +44,11 @@ zend_llist zend_observer_fiber_init; zend_llist zend_observer_fiber_switch; zend_llist zend_observer_fiber_destroy; -int zend_observer_fcall_op_array_extension = -1; +int zend_observer_fcall_op_array_extension; -ZEND_TLS zend_arena *fcall_handlers_arena = NULL; -ZEND_TLS zend_execute_data *first_observed_frame = NULL; -ZEND_TLS zend_execute_data *current_observed_frame = NULL; +ZEND_TLS zend_arena *fcall_handlers_arena; +ZEND_TLS zend_execute_data *first_observed_frame; +ZEND_TLS zend_execute_data *current_observed_frame; // Call during minit/startup ONLY ZEND_API void zend_observer_fcall_register(zend_observer_fcall_init init) { @@ -78,12 +78,18 @@ ZEND_API void zend_observer_startup(void) { zend_llist_init(&zend_observer_fiber_init, sizeof(zend_observer_fiber_init_handler), NULL, 1); zend_llist_init(&zend_observer_fiber_switch, sizeof(zend_observer_fiber_switch_handler), NULL, 1); zend_llist_init(&zend_observer_fiber_destroy, sizeof(zend_observer_fiber_destroy_handler), NULL, 1); + + zend_observer_fcall_op_array_extension = -1; } ZEND_API void zend_observer_activate(void) { if (ZEND_OBSERVER_ENABLED) { fcall_handlers_arena = zend_arena_create(4096); + } else { + fcall_handlers_arena = NULL; } + first_observed_frame = NULL; + current_observed_frame = NULL; } ZEND_API void zend_observer_deactivate(void) {