From: Nick Porter Date: Mon, 21 Mar 2022 12:27:26 +0000 (+0000) Subject: v4: Three small fixes to fr_network_listen_sent_packet() (#4426) X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=07bc70dc1184c6f8fa374618a9284304a54f5cc2;p=thirdparty%2Ffreeradius-server.git v4: Three small fixes to fr_network_listen_sent_packet() (#4426) * 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 --- diff --git a/src/lib/io/network.c b/src/lib/io/network.c index 0b3ad9d232f..a582c07482a 100644 --- a/src/lib/io/network.c +++ b/src/lib/io/network.c @@ -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; }