Bug 291107 - gnome-disk-utility crashes in oxygen-gtk3
Summary: gnome-disk-utility crashes in oxygen-gtk3
Status: CLOSED FIXED
Alias: None
Product: Oxygen
Classification: Plasma
Component: gtk2-engine (show other bugs)
Version: unspecified
Platform: Unlisted Binaries Linux
: NOR crash
Target Milestone: ---
Assignee: Hugo Pereira Da Costa
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-01-10 02:21 UTC by nucleo
Modified: 2012-05-15 04:08 UTC (History)
3 users (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments
palimpsest without window border (90.39 KB, image/png)
2012-01-10 02:22 UTC, nucleo
Details
debug messages after switching back from konsole to palimpsest and showing tooltips (124.38 KB, text/plain)
2012-01-10 15:54 UTC, nucleo
Details

Note You need to log in before you can comment on or make changes to this bug.
Description nucleo 2012-01-10 02:21:41 UTC
Version:           unspecified (using Devel) 
OS:                Linux

gnome-disk-utility-3.0.2 (palimpsest) crashes when moving  cursor over input fields in connect to server window.

Reproducible: Sometimes

Steps to Reproduce:
1. Start gnome-disk-utility-3.0.2 (palimpsest).
2. Open File - Connect to server
3. Try to move cursor above server and username input fields several times

Actual Results:  
Crash:
$ gdb palimpsest
hGNU gdb (GDB) Fedora (7.4.50.20120103-5.fc17)
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /usr/bin/palimpsest...Reading symbols from /usr/lib/debug/usr/bin/palimpsest.debug...done.
done.
(gdb) r
Starting program: /usr/bin/palimpsest 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/libthread_db.so.1".
[New Thread 0xb7fd6b40 (LWP 1698)]

Gtk-WARNING **: Error setting gtk-auto-mnemonics in /home/user/.config/gtk-3.0/settings.ini: Key file contains key 'gtk-auto-mnemonics' which has a value that cannot be interpreted.

Gtk-WARNING **: Error setting gtk-button-images in /home/user/.config/gtk-3.0/settings.ini: Key file contains key 'gtk-button-images' which has a value that cannot be interpreted.

Gtk-WARNING **: Error setting gtk-menu-images in /home/user/.config/gtk-3.0/settings.ini: Key file contains key 'gtk-menu-images' which has a value that cannot be interpreted.
Detaching after fork from child process 1699.
Detaching after fork from child process 1700.
Oxygen::WidgetLookup::find - context: 0xba6460 type: GtkWindow - no match found

Gtk-CRITICAL **: gtk_widget_get_window: assertion `GTK_IS_WIDGET (widget)' failed
Oxygen::WidgetLookup::find - context: 0xba6460 type: GtkWindow - no match found

Gtk-CRITICAL **: gtk_widget_get_window: assertion `GTK_IS_WIDGET (widget)' failed

Gtk-CRITICAL **: gtk_widget_get_window: assertion `GTK_IS_WIDGET (widget)' failed

Gtk-CRITICAL **: gtk_widget_get_window: assertion `GTK_IS_WIDGET (widget)' failed

Gtk-CRITICAL **: gtk_widget_get_window: assertion `GTK_IS_WIDGET (widget)' failed

Gtk-CRITICAL **: gtk_widget_get_window: assertion `GTK_IS_WIDGET (widget)' failed

Gtk-CRITICAL **: gtk_widget_get_window: assertion `GTK_IS_WIDGET (widget)' failed

Gtk-CRITICAL **: gtk_widget_get_window: assertion `GTK_IS_WIDGET (widget)' failed

Gtk-CRITICAL **: gtk_widget_get_window: assertion `GTK_IS_WIDGET (widget)' failed

Program received signal SIGSEGV, Segmentation fault.
0x0151d000 in Oxygen::WidgetLookup::find (this=this@entry=0x80fde2c, context=context@entry=0xba6460, type=134738168)
    at /usr/src/debug/oxygen-gtk3-1.2.0/src/oxygenwidgetlookup.cpp:82
82	            if( G_OBJECT_TYPE( *iter ) == type )
Missing separate debuginfos, use: debuginfo-install atk-2.3.3-1.fc17.i686 avahi-glib-0.6.30-6.fc17.i686 avahi-libs-0.6.30-6.fc17.i686 avahi-ui-gtk3-0.6.30-6.fc17.i686 cairo-1.10.2-5.fc17.i686 cairo-gobject-1.10.2-5.fc17.i686 dbus-glib-0.92-2.fc15.i686 dbus-libs-1.4.10-3.fc17.i686 expat-2.0.1-11.fc15.i686 fontconfig-2.8.0-4.fc16.i686 freetype-freeworld-2.4.8-2.fc17.i686 gdbm-1.10-1.fc17.i686 gdk-pixbuf2-2.25.0-1.fc17.i686 glibc-2.15-1.fc17.i686 gvfs-1.11.1-1.fc17.i686 libX11-1.4.99.1-2.fc17.i686 libXau-1.0.6-2.fc15.i686 libXcomposite-0.4.3-2.fc15.i686 libXcursor-1.1.12-1.fc17.i686 libXdamage-1.1.3-2.fc15.i686 libXext-1.3.0-1.fc17.i686 libXfixes-5.0-1.fc16.i686 libXi-1.5.99.2-1.20111222gitae0187c87.fc17.i686 libXinerama-1.1.1-2.fc15.i686 libXrandr-1.3.1-2.fc15.i686 libXrender-0.9.6-2.fc15.i686 libatasmart-0.18-1.fc17.i686 libbluray-0.2.1-1.fc17.i686 libffi-3.0.10-1.fc17.i686 libgcc-4.7.0-0.5.fc17.i686 libgcrypt-1.5.0-2.fc17.i686 libgnome-keyring-3.3.3-1.fc17.i686 libgpg-error-1.10-1.fc16.i686 libpng-1.5.7-1.fc17.i686 libselinux-2.1.9-2.fc17.i686 libstdc++-4.7.0-0.5.fc17.i686 libudev-175-1.fc17.i686 libxcb-1.7-3.fc16.i686 libxml2-2.7.8-6.fc16.i686 pango-1.29.5-1.fc17.i686 pixman-0.24.0-1.fc17.i686 unique3-3.0.2-2.fc17.i686 zlib-1.2.5-5.fc17.i686
(gdb) bt
#0  0x0151d000 in Oxygen::WidgetLookup::find (this=this@entry=0x80fde2c, context=context@entry=0xba6460, type=134738168)
    at /usr/src/debug/oxygen-gtk3-1.2.0/src/oxygenwidgetlookup.cpp:82
#1  0x0151d18c in Oxygen::WidgetLookup::find (this=0x80fde2c, context=0xba6460, path=0x81d7b38)
    at /usr/src/debug/oxygen-gtk3-1.2.0/src/oxygenwidgetlookup.cpp:61
#2  0x01518f00 in Oxygen::render_background (engine=0x80f3c80, context=0xba6460, x=0, y=0, w=199, h=27)
    at /usr/src/debug/oxygen-gtk3-1.2.0/src/oxygenthemingengine.cpp:210
#3  0x005b8ef4 in gtk_render_background (context=context@entry=0x8342c58, cr=cr@entry=0xba6460, x=0, 
    x@entry=<error reading variable: Could not find type for DW_OP_GNU_const_type>, y=0, 
    y@entry=<error reading variable: Could not find type for DW_OP_GNU_const_type>, width=199, height=27)
    at gtkstylecontext.c:3778
#4  0x0062a6ac in paint_background_and_frame (tooltip=tooltip@entry=0x82e9c70, cr=cr@entry=0xba6460) at gtktooltip.c:598
#5  0x0062aa46 in maybe_update_shape (tooltip=0x82e9c70) at gtktooltip.c:624
#6  maybe_update_shape (tooltip=0x82e9c70) at gtktooltip.c:605
#7  0x00cd3d14 in g_cclosure_marshal_VOID__VOID (closure=0x82e83f8, return_value=0x0, n_param_values=1, 
    param_values=0x81024a8, invocation_hint=0xbfffdf00, marshal_data=0x0) at gmarshal.c:85
#8  0x00cd2735 in g_closure_invoke (closure=0x82e83f8, return_value=return_value@entry=0x0, n_param_values=1, 
    param_values=param_values@entry=0x81024a8, invocation_hint=invocation_hint@entry=0xbfffdf00) at gclosure.c:774
#9  0x00ce37d5 in signal_emit_unlocked_R (node=node@entry=0x8071700, detail=detail@entry=0, 
    instance=instance@entry=0x80bec58, emission_return=emission_return@entry=0x0, 
    instance_and_params=instance_and_params@entry=0x81024a8) at gsignal.c:3302
#10 0x00ceb31a in g_signal_emit_valist (instance=instance@entry=0x80bec58, signal_id=signal_id@entry=8, 
    detail=detail@entry=0, var_args=var_args@entry=0xbfffe0ac "\370\360\a\b\223F\317") at gsignal.c:3033
#11 0x00ceb4a4 in g_signal_emit (instance=instance@entry=0x80bec58, signal_id=8, detail=detail@entry=0) at gsignal.c:3090
#12 0x006883ef in gtk_widget_realize (widget=0x80bec58) at gtkwidget.c:4403
#13 0x0062bb40 in gtk_tooltip_position (new_tooltip_widget=0x83221d8, display=0x808e800, tooltip=0x82e9c70)
    at gtktooltip.c:1068
#14 gtk_tooltip_show_tooltip (display=display@entry=0x808e800) at gtktooltip.c:1281
#15 0x0062c701 in tooltip_popup_timeout (data=0x808e800) at gtktooltip.c:1364
#16 0x0089cf8f in gdk_threads_dispatch (data=data@entry=0x81c3bd0) at gdk.c:745
#17 0x00d67710 in g_timeout_dispatch (source=0x835be70, callback=0x89cf50 <gdk_threads_dispatch>, user_data=0x81c3bd0)
    at gmain.c:3857
#18 0x00d6696a in g_main_dispatch (context=0x809aaf8) at gmain.c:2513
#19 g_main_context_dispatch (context=context@entry=0x809aaf8) at gmain.c:3050
#20 0x00d66d75 in g_main_context_iterate (dispatch=1, block=14108704, context=0x809aaf8, self=<optimized out>)
    at gmain.c:3121
#21 g_main_context_iterate (context=0x809aaf8, block=14108704, dispatch=1, self=0x8077500) at gmain.c:3058
#22 0x00d671df in g_main_loop_run (loop=0x83294e8) at gmain.c:3315
#23 0x0048d569 in gtk_dialog_run (dialog=0x8317810) at gtkdialog.c:1111
#24 0x08050d87 in on_file_connect_action (action=action@entry=0x807d4e8, user_data=0x80a7478) at gdu-shell.c:738
#25 0x00cd3d14 in g_cclosure_marshal_VOID__VOID (closure=0x81c65e0, return_value=0x0, n_param_values=1, 
    param_values=0x8309868, invocation_hint=0xbfffe550, marshal_data=0x0) at gmarshal.c:85
#26 0x00cd2735 in g_closure_invoke (closure=0x81c65e0, return_value=return_value@entry=0x0, n_param_values=1, 
    param_values=param_values@entry=0x8309868, invocation_hint=invocation_hint@entry=0xbfffe550) at gclosure.c:774
---Type <return> to continue, or q <return> to quit---
#27 0x00ce37d5 in signal_emit_unlocked_R (node=node@entry=0x814f238, detail=detail@entry=0, 
    instance=instance@entry=0x807d4e8, emission_return=emission_return@entry=0x0, 
    instance_and_params=instance_and_params@entry=0x8309868) at gsignal.c:3302
#28 0x00ceb31a in g_signal_emit_valist (instance=instance@entry=0x807d4e8, signal_id=signal_id@entry=175, 
    detail=detail@entry=0, var_args=var_args@entry=0xbfffe6fc "\006L\326") at gsignal.c:3033
#29 0x00ceb4a4 in g_signal_emit (instance=instance@entry=0x807d4e8, signal_id=175, detail=detail@entry=0) at gsignal.c:3090
#30 0x00414887 in _gtk_action_emit_activate (action=action@entry=0x807d4e8) at gtkaction.c:799
#31 0x0041505d in gtk_action_activate (action=0x807d4e8) at gtkaction.c:829
#32 0x0052ff86 in gtk_real_menu_item_activate (menu_item=menu_item@entry=0x826d0d0) at gtkmenuitem.c:1754
#33 0x00cd3d14 in g_cclosure_marshal_VOID__VOID (closure=0x8079448, return_value=0x0, n_param_values=1, 
    param_values=0x8309a50, invocation_hint=0xbfffe8b0, marshal_data=0x52ff60) at gmarshal.c:85
#34 0x00cd112e in g_type_class_meta_marshal (closure=0x8079448, return_value=0x0, n_param_values=1, param_values=0x8309a50, 
    invocation_hint=0xbfffe8b0, marshal_data=0x1fc) at gclosure.c:885
#35 0x00cd2735 in g_closure_invoke (closure=closure@entry=0x8079448, return_value=return_value@entry=0x0, n_param_values=1, 
    param_values=param_values@entry=0x8309a50, invocation_hint=invocation_hint@entry=0xbfffe8b0) at gclosure.c:774
#36 0x00ce3c17 in signal_emit_unlocked_R (node=node@entry=0x8079498, detail=detail@entry=0, 
    instance=instance@entry=0x826d0d0, emission_return=emission_return@entry=0x0, 
    instance_and_params=instance_and_params@entry=0x8309a50) at gsignal.c:3232
#37 0x00ceb31a in g_signal_emit_valist (instance=instance@entry=0x826d0d0, signal_id=signal_id@entry=75, 
    detail=detail@entry=0, var_args=var_args@entry=0xbfffea5c "") at gsignal.c:3033
#38 0x00ceb4a4 in g_signal_emit (instance=instance@entry=0x826d0d0, signal_id=75, detail=detail@entry=0) at gsignal.c:3090
#39 0x0067b105 in gtk_widget_activate (widget=widget@entry=0x826d0d0) at gtkwidget.c:6165
#40 0x00536d3a in gtk_menu_shell_activate_item (menu_shell=0x826a008, menu_item=menu_item@entry=0x826d0d0, 
    force_deactivate=force_deactivate@entry=1) at gtkmenushell.c:1432
#41 0x005371d9 in gtk_menu_shell_button_release (widget=0x826a008, event=0x80a4b70) at gtkmenushell.c:831
#42 0x005288b7 in gtk_menu_button_release (event=0x80a4b70, widget=0x826a008) at gtkmenu.c:3479
#43 gtk_menu_button_release (widget=widget@entry=0x826a008, event=0x80a4b70) at gtkmenu.c:3443
#44 0x0051ce6a in _gtk_marshal_BOOLEAN__BOXED (closure=0x8074f98, return_value=0xbfffecd4, n_param_values=2, 
    param_values=0x82cb9b8, invocation_hint=0xbfffecc0, marshal_data=0x5287c0) at gtkmarshalers.c:85
#45 0x00cd112e in g_type_class_meta_marshal (closure=0x8074f98, return_value=0xbfffecd4, n_param_values=2, 
    param_values=0x82cb9b8, invocation_hint=0xbfffecc0, marshal_data=0xc4) at gclosure.c:885
#46 0x00cd2735 in g_closure_invoke (closure=closure@entry=0x8074f98, return_value=return_value@entry=0xbfffecd4, 
    n_param_values=2, param_values=param_values@entry=0x82cb9b8, invocation_hint=invocation_hint@entry=0xbfffecc0)
    at gclosure.c:774
#47 0x00ce3df7 in signal_emit_unlocked_R (node=node@entry=0x8074888, detail=detail@entry=0, 
    instance=instance@entry=0x826a008, emission_return=emission_return@entry=0xbfffee0c, 
    instance_and_params=instance_and_params@entry=0x82cb9b8) at gsignal.c:3340
#48 0x00ceb238 in g_signal_emit_valist (instance=instance@entry=0x826a008, signal_id=signal_id@entry=29, 
    detail=detail@entry=0, var_args=0xbfffee70 "\234\356\377\277pK\n\b", 
    var_args@entry=0xbfffee6c "pK\n\b\234\356\377\277pK\n\b") at gsignal.c:3043
#49 0x00ceb4a4 in g_signal_emit (instance=instance@entry=0x826a008, signal_id=29, detail=detail@entry=0) at gsignal.c:3090
#50 0x0067bf63 in gtk_widget_event_internal (widget=widget@entry=0x826a008, event=event@entry=0x80a4b70) at gtkwidget.c:6134
#51 0x0067c1df in gtk_widget_event (widget=widget@entry=0x826a008, event=event@entry=0x80a4b70) at gtkwidget.c:5850
---Type <return> to continue, or q <return> to quit---
#52 0x0051c5b2 in gtk_propagate_event (widget=0x826a008, widget@entry=0x826d0d0, event=event@entry=0x80a4b70)
    at gtkmain.c:2411
#53 0x0051ca38 in gtk_main_do_event (event=0x80a4b70) at gtkmain.c:1686
#54 0x008a6a7d in _gdk_event_emit (event=event@entry=0x80a4b70) at gdkevents.c:71
#55 0x008d4759 in gdk_event_source_dispatch (source=0x809aab0, callback=0, user_data=0x0) at gdkeventsource.c:360
#56 0x00d6696a in g_main_dispatch (context=0x809aaf8) at gmain.c:2513
#57 g_main_context_dispatch (context=context@entry=0x809aaf8) at gmain.c:3050
#58 0x00d66d75 in g_main_context_iterate (dispatch=1, block=14108704, context=0x809aaf8, self=<optimized out>)
    at gmain.c:3121
#59 g_main_context_iterate (context=0x809aaf8, block=14108704, dispatch=1, self=0x8077500) at gmain.c:3058
#60 0x00d671df in g_main_loop_run (loop=loop@entry=0x82ded88) at gmain.c:3315
#61 0x0051bca5 in gtk_main () at gtkmain.c:1159
#62 0x0804f7ac in main (argc=1, argv=0xbffff1a4) at gdu-main.c:202
(gdb) q

Expected Results:  
No crash.

When moving cursor over input fields window may loose window decorations. See screenshot.

palimpsest running with gtk-3.3.6.
Comment 1 nucleo 2012-01-10 02:22:27 UTC
Created attachment 67633 [details]
palimpsest without window border
Comment 2 nucleo 2012-01-10 02:24:41 UTC
palimpsest crashes with last oxygen-gtk3 snapshot and with older one made before changes in bug 291007.
Comment 3 Hugo Pereira Da Costa 2012-01-10 13:01:45 UTC
Indeed. Likely unrelated to recent change.
Stupid question: "palimpseste" and "gnome-disk-utility" are the same app ? 

I cannot get this code running here so cannot reproduce, but the origin of the crash might be that some widget in the stack has been deleted and hence crashes at G_OBJECT_TYPE. Maybe I can try keep track of cached widgets, and remove them from the stack at deletion.

If you don't mind, I'll post a patch here for you to test (maybe not today, but soon).
Comment 4 nucleo 2012-01-10 13:05:34 UTC
Yes, this is the same application 
http://git.gnome.org/browse/gnome-disk-utility/tree/
Comment 5 Hugo Pereira Da Costa 2012-01-10 14:11:48 UTC
Git commit 6de77bc956013e6dc885821fd03cca52f499c9a8 by Hugo Pereira Da Costa.
Committed on 10/01/2012 at 15:11.
Pushed by hpereiradacosta into branch 'gtk3'.

keep track of registered widgets, remove from stack when deleted.

M  +49   -11   src/oxygenwidgetlookup.cpp
M  +17   -3    src/oxygenwidgetlookup.h

http://commits.kde.org/oxygen-gtk/6de77bc956013e6dc885821fd03cca52f499c9a8
Comment 6 Hugo Pereira Da Costa 2012-01-10 14:12:29 UTC
Nucleo: would you give it another shot after the commit above ? It may -or not- fix the issue. (but is safer anyway).

Thanks !
Comment 7 nucleo 2012-01-10 15:17:58 UTC
I am not able reproduce crash with last snapshot (with gtk-3.3.6).
But there are still appears messages when tooltips shown:

Oxygen::WidgetLookup::find - context: 0xba6460 type: GtkWindow - no match found

Gtk-CRITICAL **: gtk_widget_get_window: assertion `GTK_IS_WIDGET (widget)'
failed
Oxygen::WidgetLookup::find - context: 0xba6460 type: GtkWindow - no match found

Gtk-CRITICAL **: gtk_widget_get_window: assertion `GTK_IS_WIDGET (widget)'
failed

And main window lost border when was tooltips shown after I switched to konsole and back to connect to server window.
Comment 8 Hugo Pereira Da Costa 2012-01-10 15:33:55 UTC
For the "no match found", well, there isn't much we can do about it. It means there is something funny in the way the application uses context to paint on widgets which prevents us to look up the widget from the context. 

At least the crash being gone when this look-up fails is a good thing ...

(The details: the whole gtk3 idea of passing only GtkContext to the style, and not the associated GtkWidget is completely incompatible with the way oxygen renders and animates widgets. So we use a "trick" to match a given context to its associated widget, and get the missing information we need from the widget. Now, for some reason, this trick does not work whith palimpseste, whereas it does work with the other applications I checked, such as gedit, oxygen-gtk3-demo, audacious, and gtk3-demo).

For the window decoration being lost, unless I'm mistaken, its completely unrelated. Oxygen-gtk does not render the window decoration, does it ? 
Or rather:
are you running on kde, or gnome (or IceWM) ? 
are you sure oxygen-gtk is used to render the window decoration ?

Thanks again for the feedback.
Comment 9 Ruslan Kabatsayev 2012-01-10 15:39:20 UTC
> For the window decoration being lost, unless I'm mistaken, its completely
> unrelated. Oxygen-gtk does not render the window decoration, does it ? 
Maybe there's a bug in kwin's interaction with the X11 properties which oxygen sets?
Comment 10 nucleo 2012-01-10 15:42:24 UTC
I am testing palimpsest under KDE 4.8 rc2 with Oxygen window decoration.
I don't know why window lost its border but this not happens when I set gtk3 theme to Raleigh.
Comment 11 nucleo 2012-01-10 15:54:30 UTC
Created attachment 67663 [details]
debug messages after switching back from konsole to palimpsest and showing tooltips
Comment 12 nucleo 2012-01-10 15:55:45 UTC
(In reply to comment #11)
> Created an attachment (id=67663) [details]
> debug messages after switching back from konsole to palimpsest and showing
> tooltips

Maybe somewhere in this messages can be found moment when window lost its border.
Comment 13 Hugo Pereira Da Costa 2012-01-10 15:56:14 UTC
eheh. Reading it right now :)
Comment 14 Hugo Pereira Da Costa 2012-01-10 15:56:34 UTC
I mean: reading the backlog just to see if I can find some clue.
Comment 15 Ruslan Kabatsayev 2012-01-10 15:56:49 UTC
@nucleo
Could you attach messages from kwin when the border disappears (after
restarting it as "kwin --replace")?
Comment 16 nucleo 2012-01-10 16:00:55 UTC
There is no any messages when running "kwin --replace" (excpet first message when kwin just started).
Comment 17 nucleo 2012-01-10 18:10:56 UTC
Problem with window border appears only with gtk-3.3.6, no problem with 3.2.2. Also no Gtk-CRITICAL messages with 3.2.2..
gtk-3.2.2 is in Fedora 16, gtk-3.3.6 in Fedora Rawhide (development branch), there are many other changes, not only newer gtk3.
Comment 18 nucleo 2012-01-10 18:27:42 UTC
And also different KDE in Fedora 16 (4.7.4) and in Rawhide (4.8 rc2).
Comment 19 Ruslan Kabatsayev 2012-01-10 18:30:14 UTC
@nucleo
Most likely it's really kde4.8 kwin's fault that window decoration disappears. Try filing a kwin bug for this.

As for the crash, since it no longer happens, I think it's time to close this bug.
Comment 20 Hugo Pereira Da Costa 2012-01-10 18:31:33 UTC
I agree.
Fine with closing. Thanks !
We'll see what kwin guys say.