hlsdemux: Directly convert GErrors to error messages
authorSebastian Dröge <sebastian@centricular.com>
Thu, 19 Jun 2014 07:40:11 +0000 (09:40 +0200)
committerSebastian Dröge <sebastian@centricular.com>
Thu, 19 Jun 2014 16:34:05 +0000 (18:34 +0200)
This will make sure that we don't leak debug information into the actual
error message string and keep it behind the debug string.

ext/hls/gsthlsdemux.c

index 5ad3646..a366abf 100644 (file)
 #include <gst/base/gsttypefindhelper.h>
 #include "gsthlsdemux.h"
 
+#define GST_ELEMENT_ERROR_FROM_ERROR(el, err) G_STMT_START { \
+  gchar *__dbg = g_strdup (err->message);                               \
+  GST_WARNING_OBJECT (el, "error: %s", __dbg);                          \
+  gst_element_message_full (GST_ELEMENT(el), GST_MESSAGE_ERROR,         \
+    err->domain, err->code,                                             \
+    NULL, __dbg, __FILE__, GST_FUNCTION, __LINE__);                     \
+  g_clear_error (&err); \
+} G_STMT_END
+
 static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src_%u",
     GST_PAD_SRC,
     GST_PAD_SOMETIMES,
@@ -459,10 +468,7 @@ gst_hls_demux_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
         gst_uri_downloader_reset (demux->downloader);
         if (!gst_hls_demux_update_playlist (demux, FALSE, &err)) {
           g_rec_mutex_unlock (&demux->stream_lock);
-          gst_element_post_message (GST_ELEMENT_CAST (demux),
-              gst_message_new_error (GST_OBJECT_CAST (demux), err,
-                  "Could not switch playlist"));
-          g_clear_error (&err);
+          GST_ELEMENT_ERROR_FROM_ERROR (demux, err);
           gst_event_unref (event);
           return FALSE;
         }
@@ -488,10 +494,7 @@ gst_hls_demux_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
         if (!gst_hls_demux_update_playlist (demux, FALSE, &err)) {
           g_rec_mutex_unlock (&demux->stream_lock);
 
-          gst_element_post_message (GST_ELEMENT_CAST (demux),
-              gst_message_new_error (GST_OBJECT_CAST (demux), err,
-                  "Could not switch playlist"));
-          g_clear_error (&err);
+          GST_ELEMENT_ERROR_FROM_ERROR (demux, err);
           gst_event_unref (event);
           return FALSE;
         }
@@ -1210,10 +1213,7 @@ gst_hls_demux_stream_loop (GstHLSDemux * demux)
         GST_DEBUG_OBJECT (demux, "Retrying now");
         return;
       } else {
-        gst_element_post_message (GST_ELEMENT_CAST (demux),
-            gst_message_new_error (GST_OBJECT_CAST (demux), err,
-                "Could not fetch the next fragment"));
-        g_clear_error (&err);
+        GST_ELEMENT_ERROR_FROM_ERROR (demux, err);
         goto pause_task;
       }
     }
@@ -1366,10 +1366,7 @@ gst_hls_demux_updates_loop (GstHLSDemux * demux)
 
     gst_m3u8_client_set_current (demux->client, child);
     if (!gst_hls_demux_update_playlist (demux, FALSE, &err)) {
-      gst_element_post_message (GST_ELEMENT_CAST (demux),
-          gst_message_new_error (GST_OBJECT_CAST (demux), err,
-              "Could not fetch the child playlist"));
-      g_error_free (err);
+      GST_ELEMENT_ERROR_FROM_ERROR (demux, err);
       goto error;
     }
   }
@@ -1423,10 +1420,7 @@ gst_hls_demux_updates_loop (GstHLSDemux * demux)
             gst_util_uint64_scale (gst_m3u8_client_get_target_duration
             (demux->client), G_USEC_PER_SEC, 2 * GST_SECOND);
       } else {
-        gst_element_post_message (GST_ELEMENT_CAST (demux),
-            gst_message_new_error (GST_OBJECT_CAST (demux), err,
-                "Could not update the playlist"));
-        g_error_free (err);
+        GST_ELEMENT_ERROR_FROM_ERROR (demux, err);
         goto error;
       }
     } else {