Better handling of blacklisted plugins: re-scan occasionally, store reason for blacklisting
Submitted by Tim Müller
+++ This bug was initially created as a clone of Bug 503675 +++
<__tim> nekohayo, your registry file is full of BLACKLISTED. The problem isn't
registry file writing or parsing, but that plugins get blacklisted for some
<nekohayo> When does blacklisting occur?
<__tim> nekohayo, when an error occurs when loading the plugin, usually a
missing symbol or library or somesuch
<nekohayo> videomixer was indeed on the gst-inspect blacklist
<__tim> are you sometimes downgrading versions of core or gst-plugins-base?
<nekohayo> no, not that I know of. Downgrading was downright impossible in
ubuntu, and I haven't used downgrade in fedora yet
<__tim> GStreamer installed in different prefixes?
<nekohayo> currently this machine is using the official gstreamer packages from
fedora + rpmfusion
<nekohayo> I'm wondering why those blacklisted plugins are never "re-scanned"
<__tim> that's a fair question I guess. But when would one rescan them? You
don't want to do it every time. So once an hour? once a day? once a week?
<nekohayo> what if they were rescanned when apps try to access them? like when
pitivi tries to use videomixer (on top of your approach of rescanning
<__tim> interesting, maybe one could do something clever there
<__tim> ideally we'd store the reason for the blacklisting as well
<ocrete> arent they rechecked if the file changes already ?
<thaytan> the plugins are rescanned if they change
<__tim> but if they don't change ...
<thaytan> but if they failed because some underlying lib was broken and then
fixed, that's not detected
<ocrete> hmm interesting point
<thaytan> storing the reason for the blacklisting is probably hard
<ocrete> also check if ld.so.cache has changed ?
<thaytan> since it's usually just 'failed to g_module_open() because of an
<ocrete> and ignore blacklists if ld.so.cache has changed (and rescan)
<__tim> thaytan, it doesn't mention the symbol? I think it does..
<ds> if the so fails to load, there isn't much overhead trying to load every
<ocrete> that said, doesnt help if one use using LD_LIBRARY_PATH
<thaytan> ds: except for forking the scanner process to re-check an otherwise
<ds> oooh, maybe recheck blacklisted plugins whenever the scanner is run, but
not run the scanner just for blacklisted plugins. Although, also mark potential
crasher blacklist plugins