GNOME Bugzilla – Bug 566846
banshee starts with a blank screen when gnome-settings-daemon is not started
Last modified: 2009-07-27 06:37:33 UTC
Please describe the problem: [Info 00:39:54.837] Running Banshee 1.4.1 [Warn 00:39:55.335] Service `Nereid.PlayerInterface' not started: An exception was thrown by the type initializer for Banshee.Collection.Gui.ColumnCellAlbum [Warn 00:39:55.337] Caught an exception - Object reference not set to an instance of an object (in `Hyena.Gui') at Hyena.Gui.PixbufImageSurface..ctor (Gdk.Pixbuf pixbuf, Boolean disposePixbuf) [0x00000] at Hyena.Gui.PixbufImageSurface..ctor (Gdk.Pixbuf pixbuf) [0x00000] at Banshee.Collection.Gui.ColumnCellAlbum..cctor () [0x00000] An exception was thrown by the type initializer for Banshee.Collection.Gui.ColumnCellAlbum (in `Banshee.ThickClient') at Banshee.Collection.Gui.AlbumListView..ctor () [0x00000] at Banshee.Sources.Gui.CompositeTrackSourceContents.InitializeViews () [0x00000] at Banshee.Sources.Gui.FilteredListSourceContents..ctor (System.String name) [0x00000] at Banshee.Sources.Gui.CompositeTrackSourceContents..ctor () [0x00000] at Nereid.PlayerInterface.BuildViews () [0x00000] at Nereid.PlayerInterface.BuildPrimaryLayout () [0x00000] at Nereid.PlayerInterface.Initialize () [0x00000] at Banshee.Gui.BaseClientWindow.InitializeWindow () [0x00000] at Banshee.Gui.BaseClientWindow..ctor (System.String title, System.String configNameSpace, Int32 defaultWidth, Int32 defaultHeight) [0x00000] at Nereid.PlayerInterface..ctor () [0x00000] at (wrapper managed-to-native) System.Reflection.MonoCMethod:InternalInvoke (object,object[],System.Exception&) at System.Reflection.MonoCMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] [Warn 00:39:55.387] Cannot connect to NetworkManager - An available, working network connection will be assumed [Info 00:39:55.524] All services are started 0.579536s (Banshee:4186): Gdk-CRITICAL **: gdk_window_get_origin: assertion `GDK_IS_WINDOW (window)' failed [Info 00:39:55.802] nereid Client Started Steps to reproduce: killall gnome-settings-daemon&&banshee-1 Actual results: Banshee starts with a blank screen with a grey background and outputs the above error message to console. Expected results: Banshee would auto-start gnome-settings-daemon Does this happen every time? Other information: Patch below.
Created attachment 125891 [details] [review] Patch that invokes dbus to start gnome-settings-daemon
This patch doesn't seem like it should be necessary. Please start banshee, wait till it's up/not printing any more debug information, then run kill -s QUIT [pid of banshee/Nereid] to get a thread dump, and attach or paste inline here.
Actually, just run with --debug and ignore the kill -s QUIT thing, but paste the full output w/ --debug on here.
Created attachment 126381 [details] banshee-1 --debug
My guess is the crash happens because IconThemeUtils.LoadIcon (image_size, "media-optical") returns null when it's called in ColumnCellAlbum.cs. I confirmed this be replacing the call with null, and I got the same stacktrace. It returns null probably because it cannot load the icon from the default theme. But I don't know much about gnome-settings-daemon, so I might be wrong. What's the best way to use a dummy/placeholder icon in this case ?
Is this a dupe of bug #539762? It's awfully similar.
If that one is a crasher, then no. This was a hang with a blank screen. I can no longer reproduce this bug since I switched to Gnome as a desktop.
I'm now experiencing this problem on my XO OLPC laptop, after updating banshee to 1.4.2 (through "yum update"). No blank screen, the banshee UI doesn't appear at all. 1.2.1 didn't have this problem. Some (rather painful) investigations have shown that IconThemeUtils.LoadIcon (image_size, "media-optical") does return null. Here's the exception I get : [Warn 19:42:09.226] Caught an exception - Object reference not set to an instance of an object (in `Hyena.Gui') at Hyena.Gui.PixbufImageSurface..ctor (Gdk.Pixbuf pixbuf, Boolean disposePixbuf) [0x00000] in /builddir/build/BUILD/banshee-1-1.4.2/src/Libraries/Hyena.Gui/Hyena.Gui/PixbufImageSurface.cs:60 at Hyena.Gui.PixbufImageSurface..ctor (Gdk.Pixbuf pixbuf) [0x00000] in /builddir/build/BUILD/banshee-1-1.4.2/src/Libraries/Hyena.Gui/Hyena.Gui/PixbufImageSurface.cs:56 at Banshee.Collection.Gui.ColumnCellAlbum..cctor () [0x00000] An exception was thrown by the type initializer for Banshee.Collection.Gui.ColumnCellAlbum (in `Banshee.ThickClient') at Banshee.Collection.Gui.AlbumListView..ctor () [0x00000] at Banshee.Sources.Gui.CompositeTrackSourceContents.InitializeViews () [0x00000] at Banshee.Sources.Gui.FilteredListSourceContents..ctor (System.String name) [0x00000] at Banshee.Sources.Gui.CompositeTrackSourceContents..ctor () [0x00000] at Nereid.PlayerInterface.BuildViews () [0x00037] in /builddir/build/BUILD/banshee-1-1.4.2/src/Clients/Nereid/Nereid/PlayerInterface.cs:164 at Nereid.PlayerInterface.BuildPrimaryLayout () [0x0002c] in /builddir/build/BUILD/banshee-1-1.4.2/src/Clients/Nereid/Nereid/PlayerInterface.cs:116 at Nereid.PlayerInterface.Initialize () [0x00000] in /builddir/build/BUILD/banshee-1-1.4.2/src/Clients/Nereid/Nereid/PlayerInterface.cs:82 at Banshee.Gui.BaseClientWindow.InitializeWindow () [0x00000] at Banshee.Gui.BaseClientWindow..ctor (System.String title, System.String configNameSpace, Int32 defaultWidth, Int32 defaultHeight) [0x00000] at Nereid.PlayerInterface..ctor () [0x00007] in /builddir/build/BUILD/banshee-1-1.4.2/src/Clients/Nereid/Nereid/PlayerInterface.cs:76 at (wrapper managed-to-native) System.Reflection.MonoCMethod:InternalInvoke (object,object[]) at System.Reflection.MonoCMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x0003f] in /builddir/build/BUILD/mono-1.9.1/mcs/class/corlib/System.Reflection/MonoMethod.cs:404
Created attachment 129614 [details] [review] Do not create a PixbufImageSurface if the pixbuf is null This patch shows one way I found to handle the missing icon. I'm not happy about it, because I think it should be handled in PixbufImageSurface. But I'm not sure how to do it.
Nothing assumes default_cover_image != null? Assuming no, this looks fine. Might be good to see if there is a more generic image that is available on KDE etc, and/or provide our own? And/or fallback to a "unknown" image?
default_cover_image == null is properly handled, no icon is displayed. But the same fix would have to be applied in about 5 other places where PixbufImageSurface is used in the same way. In those places, it's used with the "media-optical", "audio-x-generic", "video-x-generic" and "podcast" icons. Those chained constructors in PixbufImageSurface are rather annoying and, err, restrictive ;)
Oh, I didn't realize PixbufImageSurface was a Hyena class.
Created attachment 135114 [details] [review] Do not call the PixbufImageSurface constructor if the pixbuf is null This patch makes sure that the PixbufImageSurface constructor is not called with a null pixbuf. I couldn't see a way to handle this in the PixbufImageSurface class, but I'm open to suggestions about it.
Looks like it was fixed in this commit: http://git.gnome.org/cgit/banshee/commit/?id=07edaeff263b2c74d38758d48ac0102e987c1f1b
The commit was reverted, so re-opening, until further investigations.
The issue was resolved, in a slightly different way, by this commit : http://git.gnome.org/cgit/banshee/commit/?id=d693c7a0e2fba3c7923d5e447fc8abf33b90dba3
*** Bug 587865 has been marked as a duplicate of this bug. ***
*** Bug 589068 has been marked as a duplicate of this bug. ***
*** Bug 589827 has been marked as a duplicate of this bug. ***