]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
don't assert if we fail to instantiate the dictionaries
authorAlan T. DeKok <aland@freeradius.org>
Tue, 29 Jul 2025 10:36:27 +0000 (06:36 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Tue, 29 Jul 2025 12:06:31 +0000 (08:06 -0400)
src/protocols/dhcpv4/base.c
src/protocols/dhcpv6/base.c
src/protocols/radius/base.c
src/protocols/tacacs/base.c

index 13b269eaab75c789af548fabb9c07a1f9e64ce35..02b9ba46ec4bd33ee398b3ba3a7067e3ec20c931 100644 (file)
@@ -31,6 +31,7 @@ RCSID("$Id$")
 #include "attrs.h"
 
 static uint32_t instance_count = 0;
+static bool    instantiated = false;
 
 typedef struct {
        uint8_t         code;
@@ -622,16 +623,20 @@ int fr_dhcpv4_global_init(void)
                }
        }
 
+       instantiated = true;
        return 0;
 }
 
 void fr_dhcpv4_global_free(void)
 {
+       if (!instantiated) return;
+
        fr_assert(instance_count > 0);
 
        if (--instance_count > 0) return;
 
        fr_dict_autofree(dhcpv4_dict);
+       instantiated = false;
 }
 
 
index 144ef74ae4cc31d485d52d42127afe1736df03ef..44ded420fa9ffa1685e9c865694045a65f15513c 100644 (file)
@@ -36,6 +36,7 @@
 #include "attrs.h"
 
 static uint32_t instance_count = 0;
+static bool    instantiated = false;
 
 fr_dict_t const *dict_dhcpv6;
 
@@ -935,16 +936,20 @@ int fr_dhcpv6_global_init(void)
                }
        }
 
+       instantiated = true;
        return 0;
 }
 
 void fr_dhcpv6_global_free(void)
 {
+       if (!instantiated) return;
+
        fr_assert(instance_count > 0);
 
        if (--instance_count > 0) return;
 
        fr_dict_autofree(libfreeradius_dhcpv6_dict);
+       instantiated = false;
 }
 
 static bool attr_valid(fr_dict_attr_t *da)
index 0997c38c1388af82c7b990b5329ffe62c630b229..efc8bd2b8c1c0843102350b3e2a7542f42432aaf 100644 (file)
@@ -39,6 +39,7 @@ RCSID("$Id$")
 #include <freeradius-devel/protocol/radius/freeradius.internal.h>
 
 static uint32_t instance_count = 0;
+static bool    instantiated = false;
 
 fr_dict_t const *dict_freeradius;
 fr_dict_t const *dict_radius;
@@ -1251,11 +1252,14 @@ int fr_radius_global_init(void)
                goto fail;
        }
 
+       instantiated = true;
        return 0;
 }
 
 void fr_radius_global_free(void)
 {
+       if (!instantiated) return;
+
        if (--instance_count != 0) return;
 
        fr_dict_autofree(libfreeradius_radius_dict);
index a3e26881ba66637260e3fc25bb17c58cfb479693..2cdec93aa29f28a410ede875c312f230cff706bb 100644 (file)
@@ -31,6 +31,7 @@
 #include "attrs.h"
 
 static uint32_t instance_count = 0;
+static bool    instantiated = false;
 
 fr_dict_t const *dict_tacacs;
 
@@ -161,16 +162,20 @@ int fr_tacacs_global_init(void)
                goto fail;
        }
 
+       instantiated = true;
        return 0;
 }
 
 void fr_tacacs_global_free(void)
 {
+       if (!instantiated) return;
+
        fr_assert(instance_count > 0);
 
        if (--instance_count > 0) return;
 
        fr_dict_autofree(libfreeradius_tacacs_dict);
+       instantiated = false;
 }
 
 /** XOR the body based on the secret key.