From: Sebastian Dröge Date: Fri, 2 Sep 2022 13:31:54 +0000 (+0300) Subject: rtsp-server: stream: Don't loop forever if binding to the multicast address fails X-Git-Tag: 1.22.0~1008 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=57a6e48ed1c3bad72df656f74f0807dd40747554;p=platform%2Fupstream%2Fgstreamer.git 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: --- 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);