]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
don't add the dependency twice
authorAlan T. DeKok <aland@freeradius.org>
Sat, 3 Feb 2024 16:05:20 +0000 (11:05 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Sat, 3 Feb 2024 16:05:20 +0000 (11:05 -0500)
src/lib/util/dict_tokenize.c

index babda41dedc5c87d18d6a75e23692589981becdb..3d4822210b417d3b9a410ba14ad9df39a7d2f5a7 100644 (file)
@@ -2891,6 +2891,7 @@ int fr_dict_protocol_afrom_file(fr_dict_t **out, char const *proto_name, char co
 {
        char            *dict_dir = NULL;
        fr_dict_t       *dict;
+       bool            added = false;
 
        *out = NULL;
 
@@ -2917,7 +2918,10 @@ int fr_dict_protocol_afrom_file(fr_dict_t **out, char const *proto_name, char co
                 *      When we have A->B->A, it means that we don't need to track B->A, because we track
                 *      A->B.  And if A is freed, then B is freed.
                 */
-               if (!dict->loading) dict_dependent_add(dict, dependent);
+               if (!dict->loading) {
+                       added = true;
+                       dict_dependent_add(dict, dependent);
+               }
 
                /*
                 *      But we only return a pre-existing dict if _this function_ has loaded it.
@@ -2976,7 +2980,7 @@ int fr_dict_protocol_afrom_file(fr_dict_t **out, char const *proto_name, char co
 
        talloc_free(dict_dir);
 
-       dict_dependent_add(dict, dependent);
+       if (!added) dict_dependent_add(dict, dependent);
 
        *out = dict;