Increment/decrement refcount on mainconfig, in preparation for
authoraland <aland>
Tue, 9 Oct 2007 14:39:36 +0000 (14:39 +0000)
committeraland <aland>
Tue, 9 Oct 2007 14:39:36 +0000 (14:39 +0000)
HUP support (some time in the future)

src/include/radiusd.h
src/main/event.c
src/main/util.c

index 221fe9f..4abc37f 100644 (file)
@@ -211,7 +211,7 @@ typedef enum radlog_dest_t {
 
 typedef struct main_config_t {
        struct main_config *next;
-       time_t          config_dead_time;
+       int             refcount;
        lrad_ipaddr_t   myip;   /* from the command-line only */
        int             port;   /* from the command-line only */
        int             log_auth;
index 4f9d731..a2bcb15 100644 (file)
@@ -1821,7 +1821,6 @@ int received_request(rad_listen_t *listener,
        request->packet->timestamp = request->timestamp;
        request->number = request_num_counter++;
        request->priority = listener->type;
-       request->root = root;
 
        /*
         *      Set virtual server identity
@@ -1843,6 +1842,8 @@ int received_request(rad_listen_t *listener,
                return 0;
        }
        request->in_request_hash = TRUE;
+       request->root = root;
+       root->refcount++;
 
        /*
         *      The request passes many of our sanity checks.
index 2ee8084..bf51413 100644 (file)
@@ -226,6 +226,12 @@ void request_free(REQUEST **request_ptr)
                request->data = NULL;
        }
 
+       if (request->root &&
+           (request->root->refcount > 0)) {
+               request->root->refcount--;
+               request->root = NULL;
+       }
+
 #ifndef NDEBUG
        request->magic = 0x01020304;    /* set the request to be nonsense */
 #endif