element: clean up thread pool from gst_task_cleanup_all()

This ensures that all async operations (started from gst_element_call_async())
have been completed and so there is no extra thread running.

Fix races when checking for leaks on unit tests as some of those
operations were still running when the leaks tracer was checking for
leaked objects.

https://bugzilla.gnome.org/show_bug.cgi?id=768577
This commit is contained in:
Guillaume Desmottes 2016-07-08 16:36:01 +02:00 committed by Tim-Philipp Müller
parent 1ed4140d00
commit 40727d9c83
3 changed files with 15 additions and 0 deletions

View file

@ -135,6 +135,9 @@ G_GNUC_INTERNAL void _priv_gst_allocator_cleanup (void);
G_GNUC_INTERNAL void _priv_gst_caps_features_cleanup (void);
G_GNUC_INTERNAL void _priv_gst_caps_cleanup (void);
/* called from gst_task_cleanup_all(). */
G_GNUC_INTERNAL void _priv_gst_element_cleanup (void);
/* Private registry functions */
G_GNUC_INTERNAL
gboolean _priv_gst_registry_remove_cache_plugins (GstRegistry *registry);

View file

@ -3423,3 +3423,12 @@ gst_element_call_async (GstElement * element, GstElementCallAsyncFunc func,
g_thread_pool_push (gst_element_pool, async_data, NULL);
}
void
_priv_gst_element_cleanup (void)
{
if (gst_element_pool) {
g_thread_pool_free (gst_element_pool, FALSE, TRUE);
gst_element_pool = NULL;
}
}

View file

@ -386,6 +386,9 @@ gst_task_cleanup_all (void)
if ((klass = g_type_class_peek (GST_TYPE_TASK))) {
init_klass_pool (klass);
}
/* GstElement owns a GThreadPool */
_priv_gst_element_cleanup ();
}
/**