From: Alan T. DeKok Date: Sun, 25 Sep 2022 13:27:41 +0000 (-0400) Subject: rework perf calls X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f9f245e77bc1f166dfde4922b60f468139e16b69;p=thirdparty%2Ffreeradius-server.git rework perf calls to catch cases of retry / yield / abort / etc. --- diff --git a/src/lib/unlang/compile.c b/src/lib/unlang/compile.c index e4caa4acf85..6fb32f2a578 100644 --- a/src/lib/unlang/compile.c +++ b/src/lib/unlang/compile.c @@ -4441,7 +4441,7 @@ void unlang_frame_perf_init(unlang_stack_frame_t *frame) now = fr_time(); fr_time_tracking_start(NULL, &frame->tracking, now); - fr_time_tracking_yield(&frame->tracking, now); + fr_time_tracking_yield(&frame->tracking, fr_time()); } void unlang_frame_perf_yield(unlang_stack_frame_t *frame) @@ -4459,6 +4459,8 @@ void unlang_frame_perf_resume(unlang_stack_frame_t *frame) if (!instruction->number || !unlang_thread_array) return; + if (frame->tracking.state != FR_TIME_TRACKING_YIELDED) return; + fr_time_tracking_resume(&frame->tracking, fr_time()); } @@ -4473,6 +4475,8 @@ void unlang_frame_perf_cleanup(unlang_stack_frame_t *frame) t = &unlang_thread_array[instruction->number]; + if (frame->tracking.state == FR_TIME_TRACKING_YIELDED) fr_time_tracking_resume(&frame->tracking, fr_time()); + fr_time_tracking_end(NULL, &frame->tracking, fr_time()); t->tracking.running_total = fr_time_delta_add(t->tracking.running_total, frame->tracking.running_total); t->tracking.waiting_total = fr_time_delta_add(t->tracking.waiting_total, frame->tracking.waiting_total); diff --git a/src/lib/unlang/interpret.c b/src/lib/unlang/interpret.c index 0c75cf9769d..15bea9e6968 100644 --- a/src/lib/unlang/interpret.c +++ b/src/lib/unlang/interpret.c @@ -346,6 +346,7 @@ unlang_frame_action_t result_calculate(request_t *request, unlang_stack_frame_t REXDENT(); talloc_free(frame->state); + unlang_frame_perf_cleanup(frame); frame_state_init(stack, frame); return UNLANG_FRAME_ACTION_RETRY; } @@ -486,7 +487,6 @@ unlang_frame_action_t frame_eval(request_t *request, unlang_stack_frame_t *frame RDEBUG4("** [%i] %s >> %s", stack->depth, __FUNCTION__, unlang_ops[instruction->type].name); - unlang_frame_perf_resume(frame); fr_assert(frame->process != NULL); /*