summaryrefslogtreecommitdiff
path: root/gst/gstpluginfeature.c
diff options
context:
space:
mode:
authorRonald S. Bultje <rbultje@ronald.bitfreak.net>2005-01-09 01:35:01 +0000
committerRonald S. Bultje <rbultje@ronald.bitfreak.net>2005-01-09 01:35:01 +0000
commit1ffedb43a362c8e22c9e47bce376ade12bc7c9f5 (patch)
tree25be8e751d2be1b9d5d41e0695381cc82a8ccdcb /gst/gstpluginfeature.c
parent58efb5a941645beb2fe1243da66df3932f11e635 (diff)
gst/gstpluginfeature.c: Protect plugin loading by a mutex so it's threadsafe. Fixes #163234.
Original commit message from CVS: Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net> * gst/gstpluginfeature.c: (gst_plugin_feature_ensure_loaded): Protect plugin loading by a mutex so it's threadsafe. Fixes #163234.
Diffstat (limited to 'gst/gstpluginfeature.c')
-rw-r--r--gst/gstpluginfeature.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/gst/gstpluginfeature.c b/gst/gstpluginfeature.c
index 2c906894f9..b16c10ca52 100644
--- a/gst/gstpluginfeature.c
+++ b/gst/gstpluginfeature.c
@@ -91,11 +91,13 @@ gboolean
gst_plugin_feature_ensure_loaded (GstPluginFeature * feature)
{
GstPlugin *plugin;
+ static GStaticMutex mutex = G_STATIC_MUTEX_INIT;
g_return_val_if_fail (feature != NULL, FALSE);
g_return_val_if_fail (GST_IS_PLUGIN_FEATURE (feature), FALSE);
plugin = (GstPlugin *) (feature->manager);
+ g_static_mutex_lock (&mutex);
if (plugin && !gst_plugin_is_loaded (plugin)) {
#ifndef GST_DISABLE_REGISTRY
@@ -104,12 +106,21 @@ gst_plugin_feature_ensure_loaded (GstPluginFeature * feature)
"loading plugin %s for feature", plugin->desc.name);
if (gst_registry_load_plugin (GST_REGISTRY (plugin->manager),
- plugin) != GST_REGISTRY_OK)
+ plugin) != GST_REGISTRY_OK) {
+ g_static_mutex_unlock (&mutex);
return FALSE;
- } else
-#endif /* GST_DISABLE_REGISTRY */
+ }
+ } else {
+ g_static_mutex_unlock (&mutex);
return FALSE;
+ }
+#else /* GST_DISABLE_REGISTRY */
+ g_static_mutex_unlock (&mutex);
+ return FALSE;
+#endif
}
+
+ g_static_mutex_unlock (&mutex);
return TRUE;
}