From: Alan T. DeKok Date: Tue, 21 Sep 2021 20:03:19 +0000 (-0400) Subject: let's do unlang thread initialization *after* loading virtual servers. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=540708af7f07aeb180a06b7f3a35bef8c1e2e8a4;p=thirdparty%2Ffreeradius-server.git let's do unlang thread initialization *after* loading virtual servers. --- diff --git a/src/bin/unit_test_module.c b/src/bin/unit_test_module.c index ee5a4d6d01..f7ee9b04d3 100644 --- a/src/bin/unit_test_module.c +++ b/src/bin/unit_test_module.c @@ -728,8 +728,6 @@ int main(int argc, char *argv[]) EXIT_WITH_FAILURE; } - unlang_thread_instantiate(autofree); - /* * Ensure that we load the correct virtual server for the * protocol, if necessary. @@ -791,6 +789,7 @@ int main(int argc, char *argv[]) */ if (modules_thread_instantiate(thread_ctx, el) < 0) EXIT_WITH_FAILURE; if (xlat_thread_instantiate(thread_ctx) < 0) EXIT_WITH_FAILURE; + unlang_thread_instantiate(thread_ctx); /* * Set the panic action (if required) diff --git a/src/lib/unlang/compile.c b/src/lib/unlang/compile.c index ea29c82bf6..22dbd25120 100644 --- a/src/lib/unlang/compile.c +++ b/src/lib/unlang/compile.c @@ -4100,21 +4100,24 @@ void unlang_frame_perf_init(unlang_t const *instruction) { unlang_thread_t *t; - if (!instruction->number) return; + if (!instruction->number || !unlang_thread_array) return; + + fr_assert(instruction->number <= unlang_number); t = &unlang_thread_array[instruction->number]; t->use_count++; t->enter = fr_time(); - } void unlang_frame_perf_cleanup(unlang_t const *instruction) { unlang_thread_t *t; - if (!instruction->number) return; + if (!instruction || !instruction->number || !unlang_thread_array) return; + + fr_assert(instruction->number <= unlang_number); t = &unlang_thread_array[instruction->number]; diff --git a/src/lib/unlang/unlang_priv.h b/src/lib/unlang/unlang_priv.h index ca08f4dad2..89cefe9ef8 100644 --- a/src/lib/unlang/unlang_priv.h +++ b/src/lib/unlang/unlang_priv.h @@ -384,7 +384,7 @@ static inline void frame_state_init(unlang_stack_t *stack, unlang_stack_frame_t unlang_op_t *op; char const *name; -// unlang_frame_perf_init(frame->instruction); + unlang_frame_perf_init(instruction); op = &unlang_ops[instruction->type]; name = op->frame_state_name ? op->frame_state_name : __location__; @@ -437,7 +437,7 @@ static inline void frame_cleanup(unlang_stack_frame_t *frame) TALLOC_FREE(frame->state); } -// unlang_frame_perf_cleanup(frame->instruction); + unlang_frame_perf_cleanup(frame->instruction); } /** Advance to the next sibling instruction