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