Skip to content

Commit a00463a

Browse files
committed
Changes after Niki review
1 parent 194073a commit a00463a

File tree

2 files changed

+15
-26
lines changed

2 files changed

+15
-26
lines changed

Zend/zend_observer.c

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -38,19 +38,13 @@ typedef struct _zend_observer_fcall_data {
3838
zend_observer_fcall_handlers handlers[1];
3939
} zend_observer_fcall_data;
4040

41-
typedef struct _zend_observer_frame {
42-
zend_execute_data *execute_data;
43-
struct _zend_observer_frame *prev;
44-
} zend_observer_frame;
45-
4641
zend_llist zend_observers_fcall_list;
4742
zend_llist zend_observer_error_callbacks;
4843

4944
int zend_observer_fcall_op_array_extension = -1;
5045

5146
ZEND_TLS zend_arena *fcall_handlers_arena = NULL;
52-
ZEND_TLS zend_arena *observed_stack_arena = NULL;
53-
ZEND_TLS zend_observer_frame *current_observed_frame = NULL;
47+
ZEND_TLS zend_execute_data *current_observed_frame = NULL;
5448

5549
// Call during minit/startup ONLY
5650
ZEND_API void zend_observer_fcall_register(zend_observer_fcall_init init) {
@@ -82,15 +76,12 @@ ZEND_API void zend_observer_startup(void) {
8276
ZEND_API void zend_observer_activate(void) {
8377
if (ZEND_OBSERVER_ENABLED) {
8478
fcall_handlers_arena = zend_arena_create(4096);
85-
// TODO: How big should the arena be?
86-
observed_stack_arena = zend_arena_create(2048);
8779
}
8880
}
8981

9082
ZEND_API void zend_observer_deactivate(void) {
9183
if (fcall_handlers_arena) {
9284
zend_arena_destroy(fcall_handlers_arena);
93-
zend_arena_destroy(observed_stack_arena);
9485
}
9586
}
9687

@@ -147,7 +138,6 @@ static void ZEND_FASTCALL _zend_observe_fcall_begin(zend_execute_data *execute_d
147138
uint32_t fn_flags;
148139
zend_observer_fcall_data *fcall_data;
149140
zend_observer_fcall_handlers *handlers, *end;
150-
zend_observer_frame *frame;
151141

152142
if (!ZEND_OBSERVER_ENABLED) {
153143
return;
@@ -171,10 +161,7 @@ static void ZEND_FASTCALL _zend_observe_fcall_begin(zend_execute_data *execute_d
171161
return;
172162
}
173163

174-
frame = zend_arena_alloc(&observed_stack_arena, sizeof(zend_observer_frame));
175-
frame->execute_data = execute_data;
176-
frame->prev = current_observed_frame;
177-
current_observed_frame = frame;
164+
current_observed_frame = execute_data;
178165

179166
end = fcall_data->end;
180167
for (handlers = fcall_data->handlers; handlers != end; ++handlers) {
@@ -204,7 +191,6 @@ ZEND_API void ZEND_FASTCALL zend_observer_fcall_end(
204191
zend_function *func = execute_data->func;
205192
zend_observer_fcall_data *fcall_data;
206193
zend_observer_fcall_handlers *handlers, *end;
207-
zend_observer_frame *frame;
208194

209195
if (!ZEND_OBSERVER_ENABLED
210196
|| !ZEND_OBSERVABLE_FN(func->common.fn_flags)) {
@@ -226,16 +212,19 @@ ZEND_API void ZEND_FASTCALL zend_observer_fcall_end(
226212
}
227213
}
228214

229-
frame = current_observed_frame;
230-
current_observed_frame = frame->prev;
231-
zend_arena_release(&observed_stack_arena, frame);
215+
current_observed_frame = execute_data->prev_execute_data;
232216
}
233217

234218
ZEND_API void zend_observer_fcall_end_all(void)
235219
{
236-
while (current_observed_frame != NULL) {
237-
zend_observer_fcall_end(current_observed_frame->execute_data, NULL);
220+
zend_execute_data *ex = current_observed_frame;
221+
while (ex != NULL) {
222+
if (ex->func->type != ZEND_INTERNAL_FUNCTION) {
223+
zend_observer_fcall_end(ex, NULL);
224+
}
225+
ex = ex->prev_execute_data;
238226
}
227+
current_observed_frame = NULL;
239228
}
240229

241230
ZEND_API void zend_observer_error_register(zend_observer_error_cb cb)

main/main.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1747,16 +1747,16 @@ void php_request_shutdown(void *dummy)
17471747

17481748
php_deactivate_ticks();
17491749

1750+
/* 0. Call any open observer end handlers that are still open after a zend_bailout */
1751+
if (ZEND_OBSERVER_ENABLED) {
1752+
zend_observer_fcall_end_all();
1753+
}
1754+
17501755
/* 1. Call all possible shutdown functions registered with register_shutdown_function() */
17511756
if (PG(modules_activated)) {
17521757
php_call_shutdown_functions();
17531758
}
17541759

1755-
/* 1.5. Call any open end handlers that are still open after a zend_bailout */
1756-
if (ZEND_OBSERVER_ENABLED) {
1757-
zend_observer_fcall_end_all();
1758-
}
1759-
17601760
/* 2. Call all possible __destruct() functions */
17611761
zend_try {
17621762
zend_call_destructors();

0 commit comments

Comments
 (0)