diff options
author | Ronald S. Bultje <rbultje@ronald.bitfreak.net> | 2005-01-09 01:35:01 +0000 |
---|---|---|
committer | Ronald S. Bultje <rbultje@ronald.bitfreak.net> | 2005-01-09 01:35:01 +0000 |
commit | 1ffedb43a362c8e22c9e47bce376ade12bc7c9f5 (patch) | |
tree | 25be8e751d2be1b9d5d41e0695381cc82a8ccdcb /gst/gstpluginfeature.c | |
parent | 58efb5a941645beb2fe1243da66df3932f11e635 (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.c | 17 |
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; } |