mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-25 03:01:03 +00:00
discoverer: Validate timeouts before processing them
This avoids a race where the timeout callback is scheduled to run but we get sufficient information to finish discovery before actually getting around to executing the callback. See the documentation of g_source_is_destroyed() for more details. https://bugzilla.gnome.org/show_bug.cgi?id=639730
This commit is contained in:
parent
e730ce71dc
commit
65a298fdee
1 changed files with 8 additions and 6 deletions
|
@ -1153,12 +1153,14 @@ discoverer_bus_cb (GstBus * bus, GstMessage * msg, GstDiscoverer * dc)
|
|||
static gboolean
|
||||
async_timeout_cb (GstDiscoverer * dc)
|
||||
{
|
||||
dc->priv->timeoutid = 0;
|
||||
GST_DEBUG ("Setting result to TIMEOUT");
|
||||
dc->priv->current_info->result = GST_DISCOVERER_TIMEOUT;
|
||||
dc->priv->processing = FALSE;
|
||||
discoverer_collect (dc);
|
||||
discoverer_cleanup (dc);
|
||||
if (!g_source_is_destroyed (g_main_current_source ())) {
|
||||
dc->priv->timeoutid = 0;
|
||||
GST_DEBUG ("Setting result to TIMEOUT");
|
||||
dc->priv->current_info->result = GST_DISCOVERER_TIMEOUT;
|
||||
dc->priv->processing = FALSE;
|
||||
discoverer_collect (dc);
|
||||
discoverer_cleanup (dc);
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue