After the recent change to applets/notification_area/eggtraymanager.c, I can get a 100% reproduceable crash when logging out of GNOME on FreeBSD if the notification area applet is in my panel. I have been racking my brain on this one, and for the life of me, I can't explain what I'm seeing. Attached is a stack trace with some prints to show what's going on. Basically, it looks like the memory is being corrupted between the egg_tray_manager_finalize() function and the egg_tray_manager_unmanage() function. Weird thing is, if I check to see if manager->invisible is NULL in egg_tray_manager_finalize(), it still calls egg_tray_manager_unmanage(). I've reproduced this on FreeBSD 5.x and FreeBSD -stable. I can revert back to the previous rev of eggtraymanager.c to fix this crash, but I'm not sure what other bugs I would be reintroducing. I'll file a bug, but this is kind of holding up my putting GNOME 2.2 in the FreeBSD ports tree. I'd appreciate any advice. Thanks. Joe -- Joe Marcus Clarke FreeBSD GNOME Team :: marcus FreeBSD org http://www.FreeBSD.org/gnome
#0 0x2856adda in gdk_x11_drawable_get_xdisplay (drawable=0x210650)
at gdkdrawable-x11.c:909
#1 0x0804c2da in egg_tray_manager_unmanage (manager=0x210650)
at eggtraymanager.c:402
#2 0x0804bd65 in egg_tray_manager_finalize (object=0x2859aadc)
at eggtraymanager.c:167
#3 0x288fce5e in g_object_last_unref ()
from /usr/local/lib/libgobject-2.0.so.200
#4 0x288ffda8 in g_object_unref () from /usr/local/lib/libgobject-2.0.so.200
#5 0x0804b393 in free_tray (tray=0x2859aadc) at main.c:285
#6 0x2893c75b in g_datalist_clear () from /usr/local/lib/libglib-2.0.so.200
#7 0x288fcd82 in g_object_finalize ()
from /usr/local/lib/libgobject-2.0.so.200
#8 0x283d1329 in gtk_object_finalize (gobject=0x80afc80) at gtkobject.c:406
#9 0x2849f456 in gtk_widget_finalize (object=0x80afc80) at gtkwidget.c:5987
#10 0x28073c28 in panel_applet_finalize (object=0x80afc80)
at panel-applet.c:409
#11 0x288fce5e in g_object_last_unref ()
from /usr/local/lib/libgobject-2.0.so.200
(gdb) frame 2
#2 0x0804bd65 in egg_tray_manager_finalize (object=0x2859aadc)
at eggtraymanager.c:167
167 egg_tray_manager_unmanage (manager);
(gdb) print manager
$4 = (struct _EggTrayManager *) 0x808ad40
(gdb) frame 1
#1 0x0804c2da in egg_tray_manager_unmanage (manager=0x210650)
at eggtraymanager.c:402
402 display = GDK_WINDOW_XDISPLAY (manager->invisible);
(gdb) print manager
$5 = (struct _EggTrayManager *) 0x210650
(gdb) frame 2
#2 0x0804bd65 in egg_tray_manager_finalize (object=0x2859aadc)
at eggtraymanager.c:167
167 egg_tray_manager_unmanage (manager);
(gdb) print manager->invisible
$6 = (struct _GtkWidget *) 0x0
(gdb) frame 1
#1 0x0804c2da in egg_tray_manager_unmanage (manager=0x210650)
at eggtraymanager.c:402
402 display = GDK_WINDOW_XDISPLAY (manager->invisible);
(gdb) print manager->invisible
Error accessing memory address 0x210668: Bad address.
Attachment:
signature.asc
Description: This is a digitally signed message part