From: Alan T. DeKok Date: Mon, 17 Jan 2022 18:43:50 +0000 (-0500) Subject: fix xlat_unregister_module() so that it works. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=70397190966d3d24c2f236e35b6a9ba00cc022b6;p=thirdparty%2Ffreeradius-server.git fix xlat_unregister_module() so that it works. Nothing was setting "mod_inst". The use of it was left over from before we had the module_ctx_t --- diff --git a/src/lib/server/module.c b/src/lib/server/module.c index 76c93b64ca0..a76a2ce661a 100644 --- a/src/lib/server/module.c +++ b/src/lib/server/module.c @@ -1483,7 +1483,7 @@ static int _module_instance_free(module_instance_t *mi) * Remove any registered paircmps. */ paircmp_unregister_instance(mi->dl_inst->data); - xlat_unregister_module(mi->dl_inst->data); + xlat_unregister_module(mi->dl_inst); } /* diff --git a/src/lib/unlang/xlat.h b/src/lib/unlang/xlat.h index c11b7c24ba6..de8bf877bd1 100644 --- a/src/lib/unlang/xlat.h +++ b/src/lib/unlang/xlat.h @@ -364,7 +364,7 @@ void _xlat_async_thread_instantiate_set(xlat_t const *xlat, void *uctx); void xlat_unregister(char const *name); -void xlat_unregister_module(void *instance); +void xlat_unregister_module(dl_module_inst_t const *inst); int xlat_register_redundant(CONF_SECTION *cs); int xlat_init(void); void xlat_free(void); diff --git a/src/lib/unlang/xlat_builtin.c b/src/lib/unlang/xlat_builtin.c index 6dca280562c..870237b7c69 100644 --- a/src/lib/unlang/xlat_builtin.c +++ b/src/lib/unlang/xlat_builtin.c @@ -507,7 +507,7 @@ void xlat_unregister(char const *name) } -void xlat_unregister_module(void *instance) +void xlat_unregister_module(dl_module_inst_t const *inst) { xlat_t *c; fr_rb_iter_inorder_t iter; @@ -517,7 +517,9 @@ void xlat_unregister_module(void *instance) for (c = fr_rb_iter_init_inorder(&iter, xlat_root); c; c = fr_rb_iter_next_inorder(&iter)) { - if (c->mod_inst != instance) continue; + if (!c->mctx) continue; + if (c->mctx->inst != inst) continue; + fr_rb_iter_delete_inorder(&iter); } } diff --git a/src/lib/unlang/xlat_priv.h b/src/lib/unlang/xlat_priv.h index 4e2e525e81b..293ab186ea1 100644 --- a/src/lib/unlang/xlat_priv.h +++ b/src/lib/unlang/xlat_priv.h @@ -62,7 +62,6 @@ typedef struct xlat_s { xlat_flags_t flags; //!< various flags - void *mod_inst; //!< Module instance passed to xlat xlat_input_type_t input_type; //!< Type of input used. xlat_arg_parser_t const *args; //!< Definition of args consumed. } xlat_t;