Bug#515946: libxi6 2:1.2.0-2 makes iceweasel and midori crash

Julien Cristau jcristau at debian.org
Wed Aug 12 13:14:36 UTC 2009


On Wed, May 27, 2009 at 17:58:08 +0200, Vincent Lefevre wrote:

> And the backtrace of previous execution (without valgrind):
> 
> vin:~> gdb =midori core
> GNU gdb 6.8-debian
> [...]
> Core was generated by `midori'.
> Program terminated with signal 11, Segmentation fault.
> [New process 10943]
> #0  _gdk_x11_screen_process_owner_change (screen=0x0, event=0x7fffe53b6900)
>     at /scratch/build-area/gtk+2.0-2.16.1/gdk/x11/gdkscreen-x11.c:1124
> 1124    /scratch/build-area/gtk+2.0-2.16.1/gdk/x11/gdkscreen-x11.c: No such file or directory.
>         in /scratch/build-area/gtk+2.0-2.16.1/gdk/x11/gdkscreen-x11.c

this is:
  Atom xcm_selection_atom = gdk_x11_atom_to_xatom_for_display (screen_x11->display,
                                                               screen_x11->cm_selection_atom);

and screen_x11 is NULL.  It might be worth printing *event, too.

> (gdb) bt
> #0  _gdk_x11_screen_process_owner_change (screen=0x0, event=0x7fffe53b6900)
>     at /scratch/build-area/gtk+2.0-2.16.1/gdk/x11/gdkscreen-x11.c:1124
> #1  0x00007feadc5103e4 in gdk_event_translate (display=0x1bb10a0, 
>     event=0x1c27ea0, xevent=0x7fffe53b6900, return_exposes=0)
>     at /scratch/build-area/gtk+2.0-2.16.1/gdk/x11/gdkevents-x11.c:2093

eww. gdk_event_translate() is a freaking monster...
the relevant code seems to be:

  window = NULL;
[...]
  get_real_window (display, xevent, &xwindow, &filter_xwindow);

  window = gdk_window_lookup_for_display (display, xwindow);
[...]
  if (window && !GDK_IS_WINDOW (window))
    window = NULL;
[...]
  if (window)
    {
      screen = GDK_WINDOW_SCREEN (window);
      screen_x11 = GDK_SCREEN_X11 (screen);
      toplevel = _gdk_x11_window_get_toplevel (window);
    }
[...]

      if (xevent->type - display_x11->xfixes_event_base == XFixesSelectionNotify)        {
          XFixesSelectionNotifyEvent *selection_notify = (XFixesSelectionNotifyEvent *)xevent;
          _gdk_x11_screen_process_owner_change (screen, xevent);

and we crash here with a NULL screen.  No clue why the libXi bump gets
gtk confused over a fixes event...  cc:ing the gtk maintainers.

According to your xtrace dump the event is something like
000:>:00df: Event XFIXES SelectionNotify(116) subtype=set owner(0x00) window=0x00600001 owner=0x00000000 selection=0x1("PRIMARY") timestamp=0xe9facbed selectionTimestamp=0xe9facbed

One thing you might be able to do is try to spot a difference in xtrace
dumps between the working and broken cases?

> #2  0x00007feadc5108b7 in _gdk_events_queue (display=0x1bb10a0)
>     at /scratch/build-area/gtk+2.0-2.16.1/gdk/x11/gdkevents-x11.c:2298
> #3  0x00007feadc510c8e in gdk_event_dispatch (source=<value optimized out>, 
>     callback=0x7fffe53b6900, user_data=0x1bb10a0)
>     at /scratch/build-area/gtk+2.0-2.16.1/gdk/x11/gdkevents-x11.c:2358
> #4  0x00007feada4dbf7a in IA__g_main_context_dispatch (context=0x1bbd400)
>     at /tmp/cdt.XX50MgKl/build-area/glib2.0-2.20.1/glib/gmain.c:1814
> #5  0x00007feada4df640 in g_main_context_iterate (context=0x1bbd400, block=1, 
>     dispatch=1, self=<value optimized out>)
>     at /tmp/cdt.XX50MgKl/build-area/glib2.0-2.20.1/glib/gmain.c:2448
> #6  0x00007feada4dfb0d in IA__g_main_loop_run (loop=0x1ccfed0)
>     at /tmp/cdt.XX50MgKl/build-area/glib2.0-2.20.1/glib/gmain.c:2656
> #7  0x00007feadc81eb34 in IA__gtk_dialog_run (dialog=0x1bff050)
>     at /scratch/build-area/gtk+2.0-2.16.1/gtk/gtkdialog.c:1090
> #8  0x000000000041d653 in main ()
> 

Cheers,
Julien




More information about the pkg-gnome-maintainers mailing list