From 57a6e48ed1c3bad72df656f74f0807dd40747554 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Fri, 2 Sep 2022 16:31:54 +0300 Subject: [PATCH] rtsp-server: stream: Don't loop forever if binding to the multicast address fails The address/port is pre-defined by the caller of the function, so retrying is only going to loop forever. Ideally the multicast address should be checked after allocating but this doesn't happen currently, so it's better to error out cleanly then to loop forever trying the same address. Part-of: --- subprojects/gst-rtsp-server/gst/rtsp-server/rtsp-stream.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/subprojects/gst-rtsp-server/gst/rtsp-server/rtsp-stream.c b/subprojects/gst-rtsp-server/gst/rtsp-server/rtsp-stream.c index 151af81..fed62d8 100644 --- a/subprojects/gst-rtsp-server/gst/rtsp-server/rtsp-stream.c +++ b/subprojects/gst-rtsp-server/gst/rtsp-server/rtsp-stream.c @@ -1507,8 +1507,10 @@ again: || multicast) { GstRTSPAddressFlags flags; - if (addr) + if (addr) { + g_assert (*server_addr_out == NULL); rejected_addresses = g_list_prepend (rejected_addresses, addr); + } if (!pool) goto no_pool; @@ -1558,9 +1560,15 @@ again: if (!g_socket_bind (rtp_socket, rtp_sockaddr, FALSE, NULL)) { GST_DEBUG_OBJECT (stream, "rtp bind() failed, will try again"); g_object_unref (rtp_sockaddr); - if (transport_settings_defined) + if (transport_settings_defined) { goto transport_settings_error; - goto again; + } else if (*server_addr_out && ((pool + && gst_rtsp_address_pool_has_unicast_addresses (pool)) + || multicast)) { + goto no_address; + } else { + goto again; + } } g_object_unref (rtp_sockaddr); -- 2.7.4