GNOME Bugzilla – Bug 562572
multiudpsink handles errors in _render() too aggressively
Last modified: 2009-01-23 08:41:14 UTC
The code in gst_multiudpsink_render() treats all errors from sendto() except EINTR, EAGAIN and EPERM as so serious that it returns GST_FLOW_ERROR. This regardless of how many clients the multiudpsink has. This causes e.g. a temporary network failure (ENETUNREACH) to terminate the pipeline, eventhough it would have been better off just ignoring the error and then continue delivery as soon as the network is restored. The attached patch makes gst_multiudpsink_render() ignore all errors. This works fine for cases where there is some other control protocol active (e.g., RTSP) which will terminate the pipeline if the client isn't reachable for a while, but may be too lax for pure UDP pipelines. Maybe there needs to be a property which controls whether errors from sendto() are to be ignored, or propagated?
Created attachment 123611 [details] [review] Make gst_multiudpsink_render() ignore errors from sendto()
Patch by: Peter Kjellerstedt <pkj at axis com> * gst/udp/gstmultiudpsink.c: (gst_multiudpsink_render): Make gst_multiudpsink_render() ignore errors from sendto() instead of breaking streaming. Emit a warning instead. Fixes #562572.