]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Tidy up on connection close
authorNick Porter <nick@portercomputing.co.uk>
Thu, 17 Aug 2023 19:10:45 +0000 (20:10 +0100)
committerNick Porter <nick@portercomputing.co.uk>
Thu, 17 Aug 2023 19:58:29 +0000 (20:58 +0100)
src/lib/io/master.c

index 6ea24d45d2c57c9421bab003c7645f31916cef90..c0ce3ee9ab1b561df63ce971914b07b4984542eb 100644 (file)
@@ -2574,6 +2574,7 @@ static int mod_close(fr_listen_t *li)
        fr_io_instance_t const *inst;
        fr_io_connection_t *connection;
        fr_listen_t *child;
+       fr_io_client_t *parent;
 
        get_inst(li, &inst, NULL, &connection, &child);
 
@@ -2597,6 +2598,22 @@ static int mod_close(fr_listen_t *li)
        if (connection->client->pending) {
                TALLOC_FREE(connection->client->pending); /* for any pending packets */
        }
+
+       /*
+        *      Remove connection from parent hash table
+        */
+       parent = connection->parent;
+       if (parent->ht) {
+               pthread_mutex_lock(&parent->mutex);
+               (void) fr_hash_table_delete(parent->ht, connection);
+               pthread_mutex_unlock(&parent->mutex);
+       }
+
+       /*
+        *      Clean up listener
+        */
+       fr_network_listen_delete(connection->nr, child);
+
        talloc_free(connection->dl_inst);
 
        return 0;