GNOME Bugzilla – Bug 78061
Nautilus fails to start on ffb type frame buffer when deflinear mode set to false
Last modified: 2004-12-22 21:47:04 UTC
Using Beta 3 on Solaris Sparc 8 Attempting to start nautilus on ffb type frame buffer (graphics adapter) reports an X window system error when deflinear mode set to false. Running nautilus --sync gives the following error The program 'nautilus' received an X Window System error. This probably reflects a bug in the program. The error was 'BadMatch (invalid parameter attributes)'. (Details: serial 1389 error_code 8 request_code 2 minor_code 0) (Note to programmers: normally, X errors are reported asynchronously; that is, you will receive the error a while after causing it. To debug your program, run it with the --sync command line option to change this behavior. You can then get a meaningful backtrace from your debugger if you break on the gdk_x_error() function.) Nautilus functions correctly wheen ffb deflinear option set to true
detected a multithreaded program in gdk_x_error < (2) stop in `libgdk-x11-2.0.so.0`gdkmain-x11.c`gdk_x_error (.../dist/share/forte_dev,v6.2/SUNWspro/bin/../WS6U2/bin/sparcv9/dbx) run Running: nautilus (process id 4136) Reading libpixbufloader-png.so Reading libpng.so.2 Reading pango-basic-x.so Reading ISO8859-1%UTF-8.so Reading UTF-8%ISO8859-1.so Reading libfile.so t@1 (l@1) stopped in gdk_x_error at line 753 in file "gdkmain-x11.c" 753 if (error->error_code) (.../dist/share/forte_dev,v6.2/SUNWspro/bin/../WS6U2/bin/sparcv9/dbx) where current thread: t@1 =>[1] gdk_x_error(display = 0x198178, error = 0xffbec660), line 753 in "gdkmain-x11.c" [2] bonobo_x_error_handler(display = 0x198178, error = 0xffbec660), line 49 in "bonobo-ui-main.c" [3] _XError(0xfe21f7dc, 0x198178, 0xfe21a000, 0x0, 0xffbec78c, 0x230), at 0xfe1bc334 [4] _XReply(0x198178, 0x246, 0x0, 0x230, 0x246, 0x198178), at 0xfe19cc28 [5] XInternAtom(0x0, 0xfe396068, 0x0, 0x198178, 0xff3e2660, 0xfec9aba6), at 0xfe1a7008 [6] gdk_window_set_mwm_hints(window = 0x27d1c0, new_hints = 0xffbec8ac), line 3346 in "gdkwindow-x11.c" [7] gdk_window_set_decorations(window = 0x27d1c0, decorations = 0), line 3410 in "gdkwindow-x11.c" [8] bonobo_dock_item_realize(widget = 0x214300), line 507 in "bonobo-dock-item.c" [9] g_cclosure_marshal_VOID__VOID(closure = 0x1ae3f0, return_value = (nil), n_param_values = 1U, param_values = 0xffbeccb0, invocation_hint = 0xffbecb84, marshal_data = 0xfecbfe88), line 78 in "gmarshal.c" [10] g_type_class_meta_marshal(closure = 0x1ae3f0, return_value = (nil), n_param_values = 1U, param_values = 0xffbeccb0, invocation_hint = 0xffbecb84, marshal_data = 0x74), line 518 in "gclosure.c" [11] g_closure_invoke(closure = 0x1ae3f0, return_value = (nil), n_param_values = 1U, param_values = 0xffbeccb0, invocation_hint = 0xffbecb84), line 441 in "gclosure.c" [12] signal_emit_unlocked_R(node = 0x1afac8, detail = 0, instance = 0x214300, emission_return = (nil), instance_and_params = 0xffbeccb0), line 2275 in "gsignal.c" [13] g_signal_emit_valist(instance = 0x214300, signal_id = 16U, detail = 0, var_args = 0xffbeceec), line 2100 in "gsignal.c" [14] gtk_signal_emit(object = 0x214300, signal_id = 16U, ...), line 355 in "gtksignal.c" [15] gtk_widget_realize(widget = 0x214300), line 1896 in "gtkwidget.c" [16] gtk_widget_map(widget = 0x214300), line 1815 in "gtkwidget.c" [17] gtk_container_map_child(child = 0x214300, client_data = (nil)), line 2207 in "gtkcontainer.c" [18] bonobo_dock_band_forall(container = 0x218120, include_internals = 1, callback = 0xfdcebbe0 = &`libgtk-x11-2.0.so.0`gtkcontainer.c`gtk_container_map_child(struct _GtkWidget *child, gpointer client_data), callback_data = (nil)), line 645 in "bonobo-dock-band.c" [19] gtk_container_forall(container = 0x218120, callback = 0xfdcebbe0 = &`libgtk-x11-2.0.so.0`gtkcontainer.c`gtk_container_map_child(struct _GtkWidget *child, gpointer client_data), callback_data = (nil)), line 1151 in "gtkcontainer.c" [20] gtk_container_map(widget = 0x218120), line 2217 in "gtkcontainer.c" [21] bonobo_dock_band_map(widget = 0x218120), line 539 in "bonobo-dock-band.c" [22] g_cclosure_marshal_VOID__VOID(closure = 0x1ae390, return_value = (nil), n_param_values = 1U, param_values = 0xffbed4d8, invocation_hint = 0xffbed3ac, marshal_data = 0xfecc5610), line 78 in "gmarshal.c" [23] g_type_class_meta_marshal(closure = 0x1ae390, return_value = (nil), n_param_values = 1U, param_values = 0xffbed4d8, invocation_hint = 0xffbed3ac, marshal_data = 0x6c), line 518 in "gclosure.c" [24] g_closure_invoke(closure = 0x1ae390, return_value = (nil), n_param_values = 1U, param_values = 0xffbed4d8, invocation_hint = 0xffbed3ac), line 441 in "gclosure.c" [25] signal_emit_unlocked_R(node = 0x1afa50, detail = 0, instance = 0x218120, emission_return = (nil), instance_and_params = 0xffbed4d8), line 2275 in "gsignal.c" [26] g_signal_emit_valist(instance = 0x218120, signal_id = 14U, detail = 0, var_args = 0xffbed714), line 2100 in "gsignal.c" [27] gtk_signal_emit(object = 0x218120, signal_id = 14U, ...), line 355 in "gtksignal.c" [28] gtk_widget_map(widget = 0x218120), line 1817 in "gtkwidget.c" [29] gtk_container_map_child(child = 0x218120, client_data = (nil)), line 2207 in "gtkcontainer.c" [30] forall_helper(list = (nil), callback = 0xfdcebbe0 = &`libgtk-x11-2.0.so.0`gtkcontainer.c`gtk_container_map_child(struct _GtkWidget *child, gpointer client_data), callback_data = (nil)), line 628 in "bonobo-dock.c" [31] bonobo_dock_forall(container = 0x213cc0, include_internals = 1, callback = 0xfdcebbe0 = &`libgtk-x11-2.0.so.0`gtkcontainer.c`gtk_container_map_child(struct _GtkWidget *child, gpointer client_data), callback_data = (nil)), line 647 in "bonobo-dock.c" [32] gtk_container_forall(container = 0x213cc0, callback = 0xfdcebbe0 = &`libgtk-x11-2.0.so.0`gtkcontainer.c`gtk_container_map_child(struct _GtkWidget *child, gpointer client_data), callback_data = (nil)), line 1151 in "gtkcontainer.c" [33] gtk_container_map(widget = 0x213cc0), line 2217 in "gtkcontainer.c" [34] bonobo_dock_map(widget = 0x213cc0), line 491 in "bonobo-dock.c" [35] g_cclosure_marshal_VOID__VOID(closure = 0x1ae390, return_value = (nil), n_param_values = 1U, param_values = 0xffbedcf0, invocation_hint = 0xffbedbc4, marshal_data = 0xfecbab78), line 78 in "gmarshal.c" [36] g_type_class_meta_marshal(closure = 0x1ae390, return_value = (nil), n_param_values = 1U, param_values = 0xffbedcf0, invocation_hint = 0xffbedbc4, marshal_data = 0x6c), line 518 in "gclosure.c" [37] g_closure_invoke(closure = 0x1ae390, return_value = (nil), n_param_values = 1U, param_values = 0xffbedcf0, invocation_hint = 0xffbedbc4), line 441 in "gclosure.c" [38] signal_emit_unlocked_R(node = 0x1afa50, detail = 0, instance = 0x213cc0, emission_return = (nil), instance_and_params = 0xffbedcf0), line 2275 in "gsignal.c" [39] g_signal_emit_valist(instance = 0x213cc0, signal_id = 14U, detail = 0, var_args = 0xffbedf2c), line 2100 in "gsignal.c" [40] gtk_signal_emit(object = 0x213cc0, signal_id = 14U, ...), line 355 in "gtksignal.c" [41] gtk_widget_map(widget = 0x213cc0), line 1817 in "gtkwidget.c" [42] gtk_window_map(widget = 0x1c8e40), line 3120 in "gtkwindow.c" [43] map(widget = 0x1c8e40), line 285 in "nautilus-desktop-window.c" [44] g_cclosure_marshal_VOID__VOID(closure = 0x1ae390, return_value = (nil), n_param_values = 1U, param_values = 0xffbee360, invocation_hint = 0xffbee234, marshal_data = 0x792d8), line 78 in "gmarshal.c" [45] g_type_class_meta_marshal(closure = 0x1ae390, return_value = (nil), n_param_values = 1U, param_values = 0xffbee360, invocation_hint = 0xffbee234, marshal_data = 0x6c), line 518 in "gclosure.c" [46] g_closure_invoke(closure = 0x1ae390, return_value = (nil), n_param_values = 1U, param_values = 0xffbee360, invocation_hint = 0xffbee234), line 441 in "gclosure.c" [47] signal_emit_unlocked_R(node = 0x1afa50, detail = 0, instance = 0x1c8e40, emission_return = (nil), instance_and_params = 0xffbee360), line 2275 in "gsignal.c" [48] g_signal_emit_valist(instance = 0x1c8e40, signal_id = 14U, detail = 0, var_args = 0xffbee59c), line 2100 in "gsignal.c" [49] gtk_signal_emit(object = 0x1c8e40, signal_id = 14U, ...), line 355 in "gtksignal.c" [50] gtk_widget_map(widget = 0x1c8e40), line 1817 in "gtkwidget.c" [51] gtk_window_show(widget = 0x1c8e40), line 3086 in "gtkwindow.c" [52] nautilus_window_show(widget = 0x1c8e40), line 1989 in "nautilus-window.c" [53] g_cclosure_marshal_VOID__VOID(closure = 0x1ae330, return_value = (nil), n_param_values = 1U, param_values = 0xffbeea48, invocation_hint = 0xffbee91c, marshal_data = 0xb2150), line 78 in "gmarshal.c" [54] g_type_class_meta_marshal(closure = 0x1ae330, return_value = (nil), n_param_values = 1U, param_values = 0xffbeea48, invocation_hint = 0xffbee91c, marshal_data = 0x5c), line 518 in "gclosure.c" [55] g_closure_invoke(closure = 0x1ae330, return_value = (nil), n_param_values = 1U, param_values = 0xffbeea48, invocation_hint = 0xffbee91c), line 441 in "gclosure.c" [56] signal_emit_unlocked_R(node = 0x1af9e0, detail = 0, instance = 0x1c8e40, emission_return = (nil), instance_and_params = 0xffbeea48), line 2275 in "gsignal.c" [57] g_signal_emit_valist(instance = 0x1c8e40, signal_id = 12U, detail = 0, var_args = 0xffbeec84), line 2100 in "gsignal.c" [58] gtk_signal_emit(object = 0x1c8e40, signal_id = 12U, ...), line 355 in "gtksignal.c" [59] gtk_widget_show(widget = 0x1c8e40), line 1637 in "gtkwidget.c" [60] nautilus_desktop_window_new(application = 0x2055c0), line 120 in "nautilus-desktop-window.c" [61] nautilus_application_create_desktop_window(application = 0x2055c0), line 590 in "nautilus-application.c" [62] nautilus_application_open_desktop(application = 0x2055c0), line 601 in "nautilus-application.c" [63] corba_start_desktop(servant = 0x20d73c, ev = 0xffbeef1c), line 186 in "nautilus-shell.c" [64] Nautilus_Shell_start_desktop(_obj = 0x20d760, ev = 0xffbeef1c), line 63 in "nautilus-shell-interface-stubs.c" [65] nautilus_application_startup(application = 0x2055c0, kill_shell = 0, restart_shell = 0, no_default_window = 0, no_desktop = 0, do_first_time_druid_check = 1, geometry = (nil), urls = (nil)), line 529 in "nautilus-application.c" [66] main(argc = 1, argv = 0xffbef154), line 261 in "nautilus-main.c" (.../dist/share/forte_dev,v6.2/SUNWspro/bin/../WS6U2/bin/sparcv9/dbx)
crasher. Eck.
The problem lies in nautilus-desktop-window.c:set_window_background. The problem is when the root window is at a different depth than the widget window's depth. If we try to set the widget window's background pixmap with the pixmap id of root window and these are of different depths, an X Window System BadMatch error results. Attaching a patch which fixes this. Note that the the BadMatch error will also occur in gdk/x11/gdkwindow- xll.c:gdk_window_set_back_pixmap. Attaching a patch which fixes the gtk+ code here for reference. I will be creating a corresponding bug in gtk+ for the same and will update the bug id here.
Created attachment 7795 [details] [review] proposed Nautlius patch
Created attachment 7796 [details] [review] proposed gtk+ patch
The corresponding gtk+ bug id is bug #79191
This has been fixed in cvs now. I just disabled the whole background pixmap hack, since it didn't work anyway. (It was supposed to remove flash on startup.)
Hmm. I just had Nautilus cvs HEAD (full Gnome2 platform build just completed tonightat about 11pm PST) crash when I ran gnome-session. Nautilus seemed to be doing it's normal rendering of the desktop, then it crashed and a new Nautilus process fired up and did not hit the error (the second Nautilus process is still running happily). Here's the full error message: Gdk-ERROR **: The program 'nautilus' received an X Window System error. This probably reflects a bug in the program. The error was 'BadPixmap (invalid Pixmap parameter)'. (Details: serial 3296 error_code 4 request_code 2 minor_code 0) (Note to programmers: normally, X errors are reported asynchronously; that is, you will receive the error a while after causing it. To debug your program, run it with the --sync command line option to change this behavior. You can then get a meaningful backtrace from your debugger if you break on the gdk_x_error() function.)
I had filed bug #79191 for this problem. Actually a check has to be made in gdk_window_set_back_pixmap() for any mismatch between the depth of the window and the pixmap. The function that will cause the problem is nautilus/libnautilus- private/nautilus-directory-background.c where we call gdk_window_set_back_pixmap().
Miles, BadPixmap and BadMatch are two very different things. This bug is fixed. Please open a new one unless you can find another dup.
ok, i still get this on my solaris builds/workstation. note that the workaround in gtk is not present in the -2-0 branch, and that it doesn't actually fix the problem. is this really supposed to be fixed, or are people relying on the assertion check in HEAD, or did this break again?
ok, getting a different bug, and i have a fix for it soon.