]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
use less memory. Don't allocate struct and then over-write it ci-debug
authorAlan T. DeKok <aland@freeradius.org>
Thu, 1 May 2025 16:05:30 +0000 (12:05 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Thu, 1 May 2025 16:09:50 +0000 (12:09 -0400)
src/lib/io/master.c

index 2dd8281586235821fe7000e87c29d2781922ca65..9d653aa15f34749b6a09ea0097c6ba13071a4561 100644 (file)
@@ -1090,7 +1090,6 @@ static fr_io_track_t *fr_io_track_add(fr_io_client_t *client,
 {
        size_t len;
        fr_io_track_t *track, *old;
-       fr_io_address_t *my_address;
 
        *is_dup = false;
 
@@ -1098,17 +1097,21 @@ static fr_io_track_t *fr_io_track_add(fr_io_client_t *client,
         *      Allocate a new tracking structure.  Most of the time
         *      there are no duplicates, so this is fine.
         */
-       MEM(track = talloc_zero_pooled_object(client, fr_io_track_t, 1, sizeof(*track) + sizeof(track->address) + 64));
-       MEM(track->address = my_address = talloc_zero(track, fr_io_address_t));
-
-       memcpy(my_address, address, sizeof(*address));
-       my_address->radclient = client->radclient;
-
-       track->client = client;
        if (client->connection) {
+               MEM(track = talloc_zero_pooled_object(client, fr_io_track_t, 1, sizeof(*track) + sizeof(track->address) + 64));
                track->address = client->connection->address;
+       } else {
+               fr_io_address_t *my_address;
+
+               MEM(track = talloc_zero_pooled_object(client, fr_io_track_t, 1, sizeof(*track) + 64));
+               MEM(track->address = my_address = talloc(track, fr_io_address_t));
+
+               *my_address = *address;
+               my_address->radclient = client->radclient;
        }
 
+       track->client = client;
+
        track->timestamp = recv_time;
        track->packets = 1;