GList *pending_uris;
GMutex lock;
+ /* TRUE if cleaning up discoverer */
+ gboolean cleanup;
/* TRUE if processing a URI */
gboolean processing;
GST_DEBUG_OBJECT (dc, "pad %s:%s", GST_DEBUG_PAD_NAME (pad));
+ DISCO_LOCK (dc);
+ if (dc->priv->cleanup) {
+ GST_WARNING_OBJECT (dc, "Cleanup, not adding pad");
+ DISCO_UNLOCK (dc);
+ return;
+ }
+ if (dc->priv->current_error) {
+ GST_WARNING_OBJECT (dc, "Ongoing error, not adding more pads");
+ DISCO_UNLOCK (dc);
+ return;
+ }
ps = g_slice_new0 (PrivateStream);
ps->dc = dc;
gst_pad_add_probe (sinkpad, GST_PAD_PROBE_TYPE_DATA_DOWNSTREAM,
(GstPadProbeCallback) got_subtitle_data, dc, NULL);
g_object_set (ps->sink, "async", FALSE, NULL);
- DISCO_LOCK (dc);
dc->priv->pending_subtitle_pads++;
- DISCO_UNLOCK (dc);
}
gst_caps_unref (caps);
gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM,
(GstPadProbeCallback) _event_probe, ps, NULL);
- DISCO_LOCK (dc);
dc->priv->streams = g_list_append (dc->priv->streams, ps);
DISCO_UNLOCK (dc);
if (ps->sink)
gst_object_unref (ps->sink);
g_slice_free (PrivateStream, ps);
+ DISCO_UNLOCK (dc);
return;
}
{
GST_DEBUG ("Cleaning up");
+ DISCO_LOCK (dc);
+ dc->priv->cleanup = TRUE;
+ DISCO_UNLOCK (dc);
+
gst_bus_set_flushing (dc->priv->bus, TRUE);
DISCO_LOCK (dc);
dc->priv->current_state = GST_STATE_NULL;
dc->priv->target_state = GST_STATE_NULL;
dc->priv->no_more_pads = FALSE;
+ dc->priv->cleanup = FALSE;
+
/* Try popping the next uri */
if (dc->priv->async) {