From 4bc906e87ebe13d186dbd834779d2028ca306764 Mon Sep 17 00:00:00 2001 From: Kristofer Bjorkstrom Date: Mon, 18 Feb 2019 15:24:18 +0100 Subject: [PATCH] rtspconnection: Fix GError set over the top of a previous GError The function fill_bytes could sometimes return a value greater than zero and in the same time set the GError. Function read_bytes calls fill_bytes in a while loop. In the special case above it would call fill_bytes with error already set. Thus resulting in "GError set over the top of a previous GError". Solved this by clearing GError when return value is greater than zero. Actions are taken depending on error type by caller of read_bytes. Eg. with EWOULDBLOCK gst_rtsp_source_dispatch_read will try to read the missing bytes again (GST_RTSP_EINTR ) https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/445 --- gst-libs/gst/rtsp/gstrtspconnection.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/gst-libs/gst/rtsp/gstrtspconnection.c b/gst-libs/gst/rtsp/gstrtspconnection.c index cb48cabc2a..a6755bedd9 100644 --- a/gst-libs/gst/rtsp/gstrtspconnection.c +++ b/gst-libs/gst/rtsp/gstrtspconnection.c @@ -1421,8 +1421,12 @@ fill_bytes (GstRTSPConnection * conn, guint8 * buffer, guint size, /* try to read more bytes */ r = fill_raw_bytes (conn, in, sizeof (in), block, err); if (r <= 0) { - if (out == 0) + if (out == 0) { out = r; + } else { + /* we have some data ignore error */ + g_clear_error (err); + } break; }