Skip to content

Commit cc7f6f5

Browse files
committed
Changes after Niki review
1 parent d7af9da commit cc7f6f5

File tree

1 file changed

+10
-20
lines changed

1 file changed

+10
-20
lines changed

Zend/zend_observer.c

Lines changed: 10 additions & 20 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,14 +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-
observed_stack_arena = zend_arena_create(4096);
8679
}
8780
}
8881

8982
ZEND_API void zend_observer_deactivate(void) {
9083
if (fcall_handlers_arena) {
9184
zend_arena_destroy(fcall_handlers_arena);
92-
zend_arena_destroy(observed_stack_arena);
9385
}
9486
}
9587

@@ -146,7 +138,6 @@ static void ZEND_FASTCALL _zend_observe_fcall_begin(zend_execute_data *execute_d
146138
uint32_t fn_flags;
147139
zend_observer_fcall_data *fcall_data;
148140
zend_observer_fcall_handlers *handlers, *end;
149-
zend_observer_frame *frame;
150141

151142
if (!ZEND_OBSERVER_ENABLED) {
152143
return;
@@ -170,10 +161,7 @@ static void ZEND_FASTCALL _zend_observe_fcall_begin(zend_execute_data *execute_d
170161
return;
171162
}
172163

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

178166
end = fcall_data->end;
179167
for (handlers = fcall_data->handlers; handlers != end; ++handlers) {
@@ -203,7 +191,6 @@ ZEND_API void ZEND_FASTCALL zend_observer_fcall_end(
203191
zend_function *func = execute_data->func;
204192
zend_observer_fcall_data *fcall_data;
205193
zend_observer_fcall_handlers *handlers, *end;
206-
zend_observer_frame *frame;
207194

208195
if (!ZEND_OBSERVER_ENABLED
209196
|| !ZEND_OBSERVABLE_FN(func->common.fn_flags)) {
@@ -225,16 +212,19 @@ ZEND_API void ZEND_FASTCALL zend_observer_fcall_end(
225212
}
226213
}
227214

228-
frame = current_observed_frame;
229-
current_observed_frame = frame->prev;
230-
zend_arena_release(&observed_stack_arena, frame);
215+
current_observed_frame = execute_data->prev_execute_data;
231216
}
232217

233218
ZEND_API void zend_observer_fcall_end_all(void)
234219
{
235-
while (current_observed_frame != NULL) {
236-
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;
237226
}
227+
current_observed_frame = NULL;
238228
}
239229

240230
ZEND_API void zend_observer_error_register(zend_observer_error_cb cb)

0 commit comments

Comments
 (0)