adaptivedemux: Don't stop all tasks and streams from the update task on errors
authorSebastian Dröge <sebastian@centricular.com>
Tue, 21 Apr 2015 20:04:56 +0000 (22:04 +0200)
committerSebastian Dröge <sebastian@centricular.com>
Tue, 21 Apr 2015 20:04:56 +0000 (22:04 +0200)
It will deadlocks as we will then join() the update task from itself. Instead
just post an actual error message on the bus and only stop the update task.

The application is then responsible for shutting down the element, and thus
all the other tasks and everything, based on the error message it gets.

gst-libs/gst/adaptivedemux/gstadaptivedemux.c

index 1c6a359..ef830ea 100644 (file)
@@ -2267,7 +2267,8 @@ gst_adaptive_demux_updates_loop (GstAdaptiveDemux * demux)
             g_get_monotonic_time () +
             klass->get_manifest_update_interval (demux);
       } else {
-        GST_ERROR_OBJECT (demux, "Could not update playlist");
+        GST_ELEMENT_ERROR (demux, STREAM, FAILED,
+            (_("Internal data stream error.")), ("Could not update playlist"));
         goto error;
       }
     } else {
@@ -2291,7 +2292,7 @@ quit:
 error:
   {
     GST_DEBUG_OBJECT (demux, "Stopped updates task because of error");
-    gst_adaptive_demux_stop_tasks (demux);
+    gst_task_stop (demux->priv->updates_task);
   }
 }