]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
fix xlat_unregister_module() so that it works.
authorAlan T. DeKok <aland@freeradius.org>
Mon, 17 Jan 2022 18:43:50 +0000 (13:43 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Mon, 17 Jan 2022 21:54:16 +0000 (16:54 -0500)
Nothing was setting "mod_inst".  The use of it was left over
from before we had the module_ctx_t

src/lib/server/module.c
src/lib/unlang/xlat.h
src/lib/unlang/xlat_builtin.c
src/lib/unlang/xlat_priv.h

index 76c93b64ca082fc773b256bff4c6a08ad6c06938..a76a2ce661ac31a9eb125d3a4658458f4f1877a6 100644 (file)
@@ -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);
        }
 
        /*
index c11b7c24ba69111b01f9b286a5db1d9c63af6643..de8bf877bd1d67af61c994f53ab037bc84ff3a1d 100644 (file)
@@ -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);
index 6dca280562c0671b5f18e68a7ae5146d2839b604..870237b7c692609845f451f28a3286db41024102 100644 (file)
@@ -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);
        }
 }
index 4e2e525e81be988a0c19fffb83dda5cd22836d81..293ab186ea1aab58e955a173307885bfbd12b167 100644 (file)
@@ -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;