GNOME Bugzilla – Bug 619717
unit tests fail if older -good plugins are present in system plugin directory
Last modified: 2010-06-24 14:44:46 UTC
This is on Mandriva 2010.0 with gstreamer 0.10.29 and gst-plugins-good 0.10.22.3: make check-TESTS make[1]: Entering directory `/home/goetz/svn/gstreamer0.10-plugins-good/BUILD/gst-plugins-good-0.10.22.3/tests/check' (gst-plugin-scanner:15130): GLib-GObject-WARNING **: cannot register existing type `GstGamma' (gst-plugin-scanner:15130): GLib-CRITICAL **: g_once_init_leave: assertion `initialization_value != 0' failed (gst-plugin-scanner:15130): GStreamer-CRITICAL **: gst_element_register: assertion `g_type_is_a (type, GST_TYPE_ELEMENT)' failed (gst-plugin-scanner:15130): GLib-GObject-WARNING **: cannot register existing type `GstVideoBalance' (gst-plugin-scanner:15130): GLib-GObject-CRITICAL **: g_type_add_interface_static: assertion `G_TYPE_IS_INSTANTIATABLE (instance_type)' failed (gst-plugin-scanner:15130): GLib-GObject-CRITICAL **: g_type_add_interface_static: assertion `G_TYPE_IS_INSTANTIATABLE (instance_type)' failed (gst-plugin-scanner:15130): GStreamer-CRITICAL **: gst_element_register: assertion `g_type_is_a (type, GST_TYPE_ELEMENT)' failed (gst-plugin-scanner:15130): GLib-GObject-WARNING **: cannot register existing type `GstVideoFlip' (gst-plugin-scanner:15130): GStreamer-CRITICAL **: gst_element_register: assertion `g_type_is_a (type, GST_TYPE_ELEMENT)' failed GConf-Fehler: Der Konfigurationsserver konnte nicht kontaktiert werden; mögliche Fehlerquellen sind, dass TCP/IP für ORBit nicht aktiviert ist oder auf Grund eines Systemabsturzes alte NFS-Sperren gesetzt sind. Unter http://projects.gnome.org/gconf/ erhalten Sie weitere Informationen (Details – 1: Läuft nicht in einer aktiven Sitzung) sys:1: Warning: cannot register existing type `GstCapsSetter' sys:1: Warning: g_once_init_leave: assertion `initialization_value != 0' failed (gst-plugin-scanner:15130): GStreamer-CRITICAL **: gst_element_register: assertion `g_type_is_a (type, GST_TYPE_ELEMENT)' failed Then it simply hangs until you abort the program.
You have a libgstgamma.so, libgstvideoflip.so and libgstvideobalance.so somewhere in your GST_PLUGIN_PATH or GST_PLUGIN_SYSTEM_PATH. These three plugins were merged into a single on (libgstvideofilter.so) in gst-plugins-good since 0.10.22.
Well, it is a bug in GStreamer really. We should be handling that somehow... (I'm sure there are multiple other bugs open that are related to this).
After uninstalling the old gst-plugins-good package, I still get the gconf error: make check-TESTS make[1]: Entering directory `/home/goetz/svn/gstreamer0.10-plugins-good/BUILD/gst-plugins-good-0.10.22.3/tests/check' GConf-Fehler: Der Konfigurationsserver konnte nicht kontaktiert werden; mögliche Fehlerquellen sind, dass TCP/IP für ORBit nicht aktiviert ist oder auf Grund eines Systemabsturzes alte NFS-Sperren gesetzt sind. Unter http://projects.gnome.org/gconf/ erhalten Sie weitere Informationen (Details – 1: Läuft nicht in einer aktiven Sitzung) sys:1: Warning: cannot register existing type `GstCapsSetter' sys:1: Warning: g_once_init_leave: assertion `initialization_value != 0' failed (gst-plugin-scanner:17864): GStreamer-CRITICAL **: gst_element_register: assertion `g_type_is_a (type, GST_TYPE_ELEMENT)' failed
(In reply to comment #2) > Well, it is a bug in GStreamer really. We should be handling that somehow... > (I'm sure there are multiple other bugs open that are related to this). We could prefix all type names in gst-plugins-bad with GstBad or something like that and disallow moving of elements between plugins for core/base/good. Not sure what else we could do here (and it's only a warning anyway...)
There are at least two issues as far as I can tell: a) unit tests within a source tree: for these we should have some sort of plugin loading whitelist environent variable to make sure only plugins of modules we depend on for the tests are loaded (ie. core/base), but not random other plugins (ie. esp. not from -ugly or -bad or installed -good in this case). b) we should have some kind of system that allows saying 'this plugin/element replaces this plugin/element from $module $start_version $min_version)" or somesuch.
OK, after uninstalling all old gstreamer plugin packages from the system, the checks ran fine.
Another potential solution is to install a dummy plugin over old plugins whose elements have been moved elsewhere. Or, we could remove old plugins during 'make install'.
Created attachment 162046 [details] [review] patch A patch to do the latter. The former seems like overkill, since this problem doesn't affect people who install binaries from distros. (Unless they package each plugin as a separate package, but that's their problem.)
This doesn't help for the capssetter problem though (which was moved between plugins but both plugins still contain valid other elements)
I think this should take care of it: commit 8afc8a7398fd5581b0d40dccdffec971e9dee789 Author: Tim-Philipp Müller <tim.muller@collabora.co.uk> Date: Thu Jun 24 15:17:11 2010 +0100 tests: add plugin loading whitelist to test environment Only want to load core/base/good plugins here. Fixes #619717.
Comment on attachment 162046 [details] [review] patch I think the consensus on this one was "let's not go there", wasn't it?