]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
catch a few more corner cases
authorAlan T. DeKok <aland@freeradius.org>
Fri, 27 May 2022 14:07:56 +0000 (10:07 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Mon, 29 Aug 2022 19:35:14 +0000 (15:35 -0400)
these are only hit when things go completely wrong, but it's
important to fix.

src/main/state.c

index f201d51202d32dfcbaac7ac1db664de6a6ef27fa..582f0d5fe18dada6aaf2810c3b428b5824972ed3 100644 (file)
@@ -65,6 +65,8 @@ struct fr_state_t {
 
 static fr_state_t global_state;
 
+#define STATE_FREE(_x) if (_x != &global_state) talloc_free(_x)
+
 #ifdef HAVE_PTHREAD_H
 
 #define PTHREAD_MUTEX_LOCK pthread_mutex_lock
@@ -182,14 +184,14 @@ fr_state_t *fr_state_init(TALLOC_CTX *ctx)
 
 #ifdef HAVE_PTHREAD_H
        if (pthread_mutex_init(&state->mutex, NULL) != 0) {
-               talloc_free(state);
+               STATE_FREE(state);
                return NULL;
        }
 #endif
 
        state->tree = rbtree_create(NULL, state_entry_cmp, NULL, 0);
        if (!state->tree) {
-               talloc_free(state);
+               STATE_FREE(state);
                return NULL;
        }
 
@@ -214,7 +216,7 @@ void fr_state_delete(fr_state_t *state)
        rbtree_free(my_tree);
        PTHREAD_MUTEX_UNLOCK(&state->mutex);
 
-       if (state != &global_state) talloc_free(state);
+       STATE_FREE(state);
 }
 
 /*