Commit 1ac2315e authored by Christoph Reiter's avatar Christoph Reiter

gstelementfactory: Fix missing features in case a feature moves to another filename

In case a plugin filename was renamed with the plugin being in the registry cache
the features were not loaded after the rename:

1) Cache of old/gone filename was loaded, features added
2) New filename was loaded, features where not added because
   they were already found in the registry.
3) In the end stale cache entries for files which are no longer there
   are removed, including the wanted features.
4) The cache gets updated without the features.

Fix this by also checking at (2) that the found feature is from the loaded plugin
and not from some stale cache entry.

This affected directsoundsink where libgstdirectsoundsink.dll was renamed
to libgstdirectsound.dll, losing the directsoundsink element in the process.

Fixes #290
parent e322250f
Pipeline #22080 passed with stages
in 47 minutes and 43 seconds
......@@ -219,7 +219,7 @@ gst_element_register (GstPlugin * plugin, const gchar * name, guint rank,
* features are removed and readded.
existing_feature = gst_registry_lookup_feature (registry, name);
if (existing_feature) {
if (existing_feature && existing_feature->plugin == plugin) {
GST_DEBUG_OBJECT (registry, "update existing feature %p (%s)",
existing_feature, name);
factory = GST_ELEMENT_FACTORY_CAST (existing_feature);
......@@ -228,6 +228,8 @@ gst_element_register (GstPlugin * plugin, const gchar * name, guint rank,
g_type_set_qdata (type, __gst_elementclass_factory, factory);
gst_object_unref (existing_feature);
return TRUE;
} else if (existing_feature) {
gst_object_unref (existing_feature);
factory = g_object_new (GST_TYPE_ELEMENT_FACTORY, NULL);
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment