mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-24 16:18:16 +00:00
discoverer: Make sure we call _stop() before being freed
This ensures that everything is properly cleaned up before the GstDiscoverer object is freed. Specifically, it makes sure that we've removed the async timeout callback before freeing the object to avoid a potential crash later on. https://bugzilla.gnome.org/show_bug.cgi?id=639755
This commit is contained in:
parent
3a165c60bf
commit
e730ce71dc
1 changed files with 9 additions and 4 deletions
|
@ -304,7 +304,8 @@ discoverer_reset (GstDiscoverer * dc)
|
|||
dc->priv->pending_uris = NULL;
|
||||
}
|
||||
|
||||
gst_element_set_state ((GstElement *) dc->priv->pipeline, GST_STATE_NULL);
|
||||
if (dc->priv->pipeline)
|
||||
gst_element_set_state ((GstElement *) dc->priv->pipeline, GST_STATE_NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -325,6 +326,8 @@ gst_discoverer_dispose (GObject * obj)
|
|||
dc->priv->bus = NULL;
|
||||
}
|
||||
|
||||
gst_discoverer_stop (dc);
|
||||
|
||||
if (dc->priv->lock) {
|
||||
g_mutex_free (dc->priv->lock);
|
||||
dc->priv->lock = NULL;
|
||||
|
@ -1271,9 +1274,11 @@ gst_discoverer_stop (GstDiscoverer * discoverer)
|
|||
/* We prevent any further processing by setting the bus to
|
||||
* flushing and setting the pipeline to READY.
|
||||
* _reset() will take care of the rest of the cleanup */
|
||||
gst_bus_set_flushing (discoverer->priv->bus, TRUE);
|
||||
gst_element_set_state ((GstElement *) discoverer->priv->pipeline,
|
||||
GST_STATE_READY);
|
||||
if (discoverer->priv->bus)
|
||||
gst_bus_set_flushing (discoverer->priv->bus, TRUE);
|
||||
if (discoverer->priv->pipeline)
|
||||
gst_element_set_state ((GstElement *) discoverer->priv->pipeline,
|
||||
GST_STATE_READY);
|
||||
}
|
||||
discoverer->priv->running = FALSE;
|
||||
DISCO_UNLOCK (discoverer);
|
||||
|
|
Loading…
Reference in a new issue