mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-26 11:41:09 +00:00
registry: Don't replace valid existing plugins by blacklisted ones
Only replace existing plugins by blacklisted ones if they correspond to the exact same plugin. If they're not the same, keep the existing valid one. Fixes #638941
This commit is contained in:
parent
27cd56b983
commit
8edee55a3a
1 changed files with 14 additions and 2 deletions
|
@ -424,8 +424,20 @@ gst_registry_add_plugin (GstRegistry * registry, GstPlugin * plugin)
|
|||
gst_registry_lookup_bn_locked (registry, plugin->basename);
|
||||
if (existing_plugin) {
|
||||
GST_DEBUG_OBJECT (registry,
|
||||
"Replacing existing plugin %p with new plugin %p for filename \"%s\"",
|
||||
existing_plugin, plugin, GST_STR_NULL (plugin->filename));
|
||||
"Replacing existing plugin \"%s\" %p with new plugin %p for filename \"%s\"",
|
||||
GST_STR_NULL (existing_plugin->filename), existing_plugin, plugin,
|
||||
GST_STR_NULL (plugin->filename));
|
||||
/* If the new plugin is blacklisted and the existing one isn't cached, do not
|
||||
* accept if it's from a different location than the existing one */
|
||||
if ((plugin->flags & GST_PLUGIN_FLAG_BLACKLISTED) &&
|
||||
strcmp (plugin->filename, existing_plugin->filename)) {
|
||||
GST_WARNING_OBJECT (registry,
|
||||
"Not replacing plugin because new one (%s) is blacklisted but for a different location than existing one (%s)",
|
||||
plugin->filename, existing_plugin->filename);
|
||||
gst_object_unref (plugin);
|
||||
GST_OBJECT_UNLOCK (registry);
|
||||
return FALSE;
|
||||
}
|
||||
registry->plugins = g_list_remove (registry->plugins, existing_plugin);
|
||||
if (G_LIKELY (existing_plugin->basename))
|
||||
g_hash_table_remove (registry->basename_hash,
|
||||
|
|
Loading…
Reference in a new issue