]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
v4: Three small fixes to fr_network_listen_sent_packet() (#4426)
authorNick Porter <nick@portercomputing.co.uk>
Mon, 21 Mar 2022 12:27:26 +0000 (12:27 +0000)
committerGitHub <noreply@github.com>
Mon, 21 Mar 2022 12:27:26 +0000 (08:27 -0400)
* The child listener has the socket rather than the parent

* Handle errors in sending packet, and increase the outstanding count

* Set the channel data listener

src/lib/io/network.c

index 0b3ad9d232f6249a8d6213a877d5219c51495a8c..a582c07482aca250c5d05d35673e33fbba5fecf8 100644 (file)
@@ -699,12 +699,13 @@ int fr_network_listen_send_packet(fr_network_t *nr, fr_listen_t *parent, fr_list
        (void) talloc_get_type_abort(nr, fr_network_t);
        (void) talloc_get_type_abort_const(li, fr_listen_t);
 
-       s = fr_rb_find(nr->sockets, &(fr_network_socket_t){ .listen = parent });
+       s = fr_rb_find(nr->sockets, &(fr_network_socket_t){ .listen = li });
        if (!s) return -1;
 
        cd = (fr_channel_data_t *) fr_message_alloc(s->ms, NULL, buflen);
        if (!cd) return -1;
 
+       cd->listen = parent;
        cd->request.is_dup = false;
        cd->priority = PRIORITY_NORMAL;
        cd->packet_ctx = packet_ctx;
@@ -712,7 +713,16 @@ int fr_network_listen_send_packet(fr_network_t *nr, fr_listen_t *parent, fr_list
        memcpy(cd->m.data, buffer, buflen);
        cd->m.when = fr_time();
 
-       return fr_network_send_request(nr, cd);
+       if (fr_network_send_request(nr, cd) < 0) {
+               talloc_free(cd->packet_ctx);
+               fr_message_done(&cd->m);
+               nr->stats.dropped++;
+               s->stats.dropped++;
+               return -1;
+       }
+
+       s->outstanding ++;
+       return 0;
 }