#718269 segfaults upon changing displays/resolution in XGrabServer

Package:
xfce4-power-manager
Source:
xfce4-power-manager
Description:
power manager for Xfce desktop
Submitter:
Date:
2015-02-03 10:51:18 UTC
Severity:
important
#718269#5
Date:
2013-07-29 14:02:32 UTC
From:
To:
It has been going on for a while but I do not remember exactly after which upgrade.

I am running awesome as a window manager for XFCE4.  Whenever I connect to external monitors, or disconnect from them I issue xrandr commands e.g.

    xrandr --output $LVDS --off
    xrandr --fbmm 520x326 \
           --output DP1 --same-as LVDS1 --mode 1920x1200 \
           --output VGA1 --mode 1920x1200 --rotate left --right-of DP1 \
           --output LVDS1 --off \
    || xrandr --output $LVDS --mode 1440x900

where LVDS is set to output of xrandr | awk '/LVDS/{print $1;}'

then some times (not always but often) xfce4-power-manager crashes with
the following traceback:

(gdb) bt
#0  XGrabServer (dpy=dpy@entry=0x0) at ../../src/GrServer.c:36
#1  0x00007ffff783ec08 in gtk_tray_icon_update_manager_window (icon=0x5555557f1020) at /tmp/buildd/gtk+2.0-2.24.20/gtk/gtktrayicon-x11.c:488
#2  0x00007ffff783ef0b in gtk_tray_icon_manager_filter (xevent=<optimized out>, event=<optimized out>, user_data=<optimized out>)
    at /tmp/buildd/gtk+2.0-2.24.20/gtk/gtktrayicon-x11.c:398
#3  0x00007ffff712524d in gdk_event_apply_filters (filters=0x555555813340, event=<optimized out>, xevent=<optimized out>)
    at /tmp/buildd/gtk+2.0-2.24.20/gdk/x11/gdkevents-x11.c:356
#4  gdk_event_translate (display=display@entry=0x5555557ab020, event=event@entry=0x5555557d9c80, xevent=xevent@entry=0x7fffffffd890,
    return_exposes=return_exposes@entry=0) at /tmp/buildd/gtk+2.0-2.24.20/gdk/x11/gdkevents-x11.c:946
#5  0x00007ffff7126a68 in _gdk_events_queue (display=display@entry=0x5555557ab020) at /tmp/buildd/gtk+2.0-2.24.20/gdk/x11/gdkevents-x11.c:2336
#6  0x00007ffff7126aee in gdk_event_dispatch (source=<optimized out>, callback=<optimized out>, user_data=<optimized out>)
    at /tmp/buildd/gtk+2.0-2.24.20/gdk/x11/gdkevents-x11.c:2397
#7  0x00007ffff633fea6 in g_main_context_dispatch () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#8  0x00007ffff63401f8 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#9  0x00007ffff63405fa in g_main_loop_run () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#10 0x00007ffff76b9257 in IA__gtk_main () at /tmp/buildd/gtk+2.0-2.24.20/gtk/gtkmain.c:1257
#11 0x000055555555bf7a in ?? ()
#12 0x000055555555c58b in main ()

here is a full one:

(gdb) bt full
#0  XGrabServer (dpy=dpy@entry=0x0) at ../../src/GrServer.c:36
No locals.
#1  0x00007ffff783ec08 in gtk_tray_icon_update_manager_window (icon=0x5555557f1020) at /tmp/buildd/gtk+2.0-2.24.20/gtk/gtktrayicon-x11.c:488
        widget = 0x5555557f1020
        screen = 0x0
        display = 0x0
        xdisplay = 0x0
#2  0x00007ffff783ef0b in gtk_tray_icon_manager_filter (xevent=<optimized out>, event=<optimized out>, user_data=<optimized out>)
    at /tmp/buildd/gtk+2.0-2.24.20/gtk/gtktrayicon-x11.c:398
        icon = <optimized out>
        xev = <optimized out>
#3  0x00007ffff712524d in gdk_event_apply_filters (filters=0x555555813340, event=<optimized out>, xevent=<optimized out>)
    at /tmp/buildd/gtk+2.0-2.24.20/gdk/x11/gdkevents-x11.c:356
        filter = <optimized out>
        tmp_list = 0x555555813340
        result = <optimized out>
#4  gdk_event_translate (display=display@entry=0x5555557ab020, event=event@entry=0x5555557d9c80, xevent=xevent@entry=0x7fffffffd890,
    return_exposes=return_exposes@entry=0) at /tmp/buildd/gtk+2.0-2.24.20/gdk/x11/gdkevents-x11.c:946
        result = <optimized out>
        window = 0x0
        window_private = 0x0
        filter_window = <optimized out>
        window_impl = 0x0
        return_val = 0
        screen = 0x0
        screen_x11 = 0x0
        toplevel = 0x0
        display_x11 = 0x5555557ab020
        xwindow = <optimized out>
        filter_xwindow = <optimized out>
#5  0x00007ffff7126a68 in _gdk_events_queue (display=display@entry=0x5555557ab020) at /tmp/buildd/gtk+2.0-2.24.20/gdk/x11/gdkevents-x11.c:2336
        node = 0x5555557d4e40
        event = 0x5555557d9c80
        xevent = {type = 33, xany = {type = 33, serial = 117553, send_event = 1, display = 0x55555579c400, window = 134}, xkey = {type = 33,
            serial = 117553, send_event = 1, display = 0x55555579c400, window = 134, root = 451, subwindow = 32, time = 0, x = 455, y = 0,
            x_root = 12582916, y_root = 0, state = 0, keycode = 0, same_screen = 0}, xbutton = {type = 33, serial = 117553, send_event = 1,
            display = 0x55555579c400, window = 134, root = 451, subwindow = 32, time = 0, x = 455, y = 0, x_root = 12582916, y_root = 0, state = 0,
            button = 0, same_screen = 0}, xmotion = {type = 33, serial = 117553, send_event = 1, display = 0x55555579c400, window = 134,
            root = 451, subwindow = 32, time = 0, x = 455, y = 0, x_root = 12582916, y_root = 0, state = 0, is_hint = 0 '\000', same_screen = 0},
          xcrossing = {type = 33, serial = 117553, send_event = 1, display = 0x55555579c400, window = 134, root = 451, subwindow = 32, time = 0,
            x = 455, y = 0, x_root = 12582916, y_root = 0, mode = 0, detail = 0, same_screen = 0, focus = 0, state = 0}, xfocus = {type = 33,
            serial = 117553, send_event = 1, display = 0x55555579c400, window = 134, mode = 451, detail = 0}, xexpose = {type = 33,
            serial = 117553, send_event = 1, display = 0x55555579c400, window = 134, x = 451, y = 0, width = 32, height = 0, count = 0},
          xgraphicsexpose = {type = 33, serial = 117553, send_event = 1, display = 0x55555579c400, drawable = 134, x = 451, y = 0, width = 32,
            height = 0, count = 0, major_code = 0, minor_code = 455}, xnoexpose = {type = 33, serial = 117553, send_event = 1,
            display = 0x55555579c400, drawable = 134, major_code = 451, minor_code = 0}, xvisibility = {type = 33, serial = 117553, send_event = 1,
            display = 0x55555579c400, window = 134, state = 451}, xcreatewindow = {type = 33, serial = 117553, send_event = 1,
            display = 0x55555579c400, parent = 134, window = 451, x = 32, y = 0, width = 0, height = 0, border_width = 455, override_redirect = 0},
          xdestroywindow = {type = 33, serial = 117553, send_event = 1, display = 0x55555579c400, event = 134, window = 451}, xunmap = {type = 33,
            serial = 117553, send_event = 1, display = 0x55555579c400, event = 134, window = 451, from_configure = 32}, xmap = {type = 33,
            serial = 117553, send_event = 1, display = 0x55555579c400, event = 134, window = 451, override_redirect = 32}, xmaprequest = {
            type = 33, serial = 117553, send_event = 1, display = 0x55555579c400, parent = 134, window = 451}, xreparent = {type = 33,
            serial = 117553, send_event = 1, display = 0x55555579c400, event = 134, window = 451, parent = 32, x = 0, y = 0,
            override_redirect = 455}, xconfigure = {type = 33, serial = 117553, send_event = 1, display = 0x55555579c400, event = 134,
            window = 451, x = 32, y = 0, width = 0, height = 0, border_width = 455, above = 12582916, override_redirect = 0}, xgravity = {
            type = 33, serial = 117553, send_event = 1, display = 0x55555579c400, event = 134, window = 451, x = 32, y = 0}, xresizerequest = {
            type = 33, serial = 117553, send_event = 1, display = 0x55555579c400, window = 134, width = 451, height = 0}, xconfigurerequest = {
            type = 33, serial = 117553, send_event = 1, display = 0x55555579c400, parent = 134, window = 451, x = 32, y = 0, width = 0, height = 0,
            border_width = 455, above = 12582916, detail = 0, value_mask = 0}, xcirculate = {type = 33, serial = 117553, send_event = 1,
            display = 0x55555579c400, event = 134, window = 451, place = 32}, xcirculaterequest = {type = 33, serial = 117553, send_event = 1,
            display = 0x55555579c400, parent = 134, window = 451, place = 32}, xproperty = {type = 33, serial = 117553, send_event = 1,
            display = 0x55555579c400, window = 134, atom = 451, time = 32, state = 0}, xselectionclear = {type = 33, serial = 117553,
            send_event = 1, display = 0x55555579c400, window = 134, selection = 451, time = 32}, xselectionrequest = {type = 33, serial = 117553,
            send_event = 1, display = 0x55555579c400, owner = 134, requestor = 451, selection = 32, target = 0, property = 455, time = 12582916},
          xselection = {type = 33, serial = 117553, send_event = 1, display = 0x55555579c400, requestor = 134, selection = 451, target = 32,
            property = 0, time = 455}, xcolormap = {type = 33, serial = 117553, send_event = 1, display = 0x55555579c400, window = 134,
            colormap = 451, new = 32, state = 0}, xclient = {type = 33, serial = 117553, send_event = 1, display = 0x55555579c400, window = 134,
            message_type = 451, format = 32, data = {b = "\000\000\000\000\000\000\000\000\307\001\000\000\000\000\000\000\004\000\300", s = {0, 0,
                0, 0, 455, 0, 0, 0, 4, 192}, l = {0, 455, 12582916, 0, 0}}}, xmapping = {type = 33, serial = 117553, send_event = 1,
            display = 0x55555579c400, window = 134, request = 451, first_keycode = 0, count = 32}, xerror = {type = 33, display = 0x1cb31,
            resourceid = 1, serial = 93824994624512, error_code = 134 '\206', request_code = 0 '\000', minor_code = 0 '\000'}, xkeymap = {
            type = 33, serial = 117553, send_event = 1, display = 0x55555579c400, window = 134,
            key_vector = "\303\001\000\000\000\000\000\000 ", '\000' <repeats 15 times>, "\307\001\000\000\000\000\000"}, xgeneric = {type = 33,
            serial = 117553, send_event = 1, display = 0x55555579c400, extension = 134, evtype = 0}, xcookie = {type = 33, serial = 117553,
            send_event = 1, display = 0x55555579c400, extension = 134, evtype = 0, cookie = 451, data = 0x20}, pad = {33, 117553, 1,
            93824994624512, 134, 451, 32, 0, 455, 12582916, 0 <repeats 14 times>}}
        xdisplay = 0x55555579c400
#6  0x00007ffff7126aee in gdk_event_dispatch (source=<optimized out>, callback=<optimized out>, user_data=<optimized out>)
    at /tmp/buildd/gtk+2.0-2.24.20/gdk/x11/gdkevents-x11.c:2397
        display = 0x5555557ab020
        event = <optimized out>
#7  0x00007ffff633fea6 in g_main_context_dispatch () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
No symbol table info available.
#8  0x00007ffff63401f8 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
No symbol table info available.
#9  0x00007ffff63405fa in g_main_loop_run () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
No symbol table info available.
#10 0x00007ffff76b9257 in IA__gtk_main () at /tmp/buildd/gtk+2.0-2.24.20/gtk/gtkmain.c:1257
        tmp_list = 0x0
        functions = 0x0
        init = <optimized out>
        loop = 0x5555557f0900
#11 0x000055555555bf7a in ?? ()
No symbol table info available.
#12 0x000055555555c58b in main ()
No symbol table info available.

#718269#10
Date:
2015-02-03 10:42:21 UTC
From:
To:
Hi,

I'm not completely sure, but the presence of gdk_event_apply_filters function
very close to the beginning of the backtrace indicates that it might be a bug
in GTK+2 [1].

As the bug reporter mentioned there,

BTW, the bug is still not fixed in GTK+2, they've pushed the fix only to GTK+3.


[1] https://bugzilla.gnome.org/show_bug.cgi?id=635380