Xpra: Ticket #148: Xpra server deadlocks

Hello,

I'm running Xpra server on debian stable (SVN version built from source, not the .deb). After some time (details still unclear to me), I can no longer attach to the server: the client will connect but nothing happens.

It seems to me that the server is actually deadlocked. Here is a backtrace for each of the threads running, starting with the thread that is worrying me:

#0  0x00007f4e07c769d3 in poll () from /lib/libc.so.6
#1  0x00007f4e019008ca in ?? () from /usr/lib/libxcb.so.1
#2  0x00007f4e01902c0c in xcb_wait_for_reply () from /usr/lib/libxcb.so.1
#3  0x00007f4e01b62613 in _XReply () from /usr/lib/libX11.so.6
#4  0x00007f4e01b4fd07 in XQueryKeymap () from /usr/lib/libX11.so.6
#5  0x00007f4dfb845ca6 in __pyx_f_8wimpiggy_8lowlevel_8bindings__get_keycodes_down (__pyx_v_display=0x10b51e0) at wimpiggy/lowlevel/bindings.c:11667
#6  0x00007f4dfb84644a in __pyx_pf_8wimpiggy_8lowlevel_8bindings_35unpress_all_keys (__pyx_self=<value optimized out>, __pyx_v_display_source=<gtk.gdk.Display at remote 0x100c870>) at wimpiggy/lowlevel/bindings.c:12001
#7  0x00000000004a83fe in call_function (f=
    Frame 0x1130440, for file /usr/local/lib/python2.6/dist-packages/xpra/server.py, line 1331, in _clear_keys_pressed (self=<XpraServer(keys_timedout={}, _id_to_window={1: <WindowModel(_input_field=<built-in function input>, _gproperties={'user-friendly-size': (172, 43), 'iconic': False, 'client-window': <gtk.gdk.Window at remote 0x11f8550>, 'size-hints': <WMSizeHints(max_aspect_ratio=None, min_aspect_ratio=None, base_size=(4, 4), min_aspect=None, max_aspect=None, min_size=(10, 17), resize_inc=(6, 13), max_size=None) at remote 0x11ec910>, 'title': u'root@xfportaldemo:~', 'group-leader': None, 'client-machine': u'demo', 'pid': 1638, 'state': frozenset([]), 'strut': None, 'icon-pixmap': None, 'owner': <DesktopManager(_models={<WindowModel(_input_field=<built-in function input>, _gproperties={'user-friendly-size': (179, 54), 'iconic': False, 'client-window': <gtk.gdk.Window at remote 0x11f8690>, 'size-hints': <WMSizeHints(max_aspect_ratio=None, min_aspect_ratio=None, base_size=(4, 4), min_aspect=None, max_aspect=No...(truncated), throwflag=<value optimized out>) at ../Python/ceval.c:3738
#8  PyEval_EvalFrameEx (f=
    Frame 0x1130440, for file /usr/local/lib/python2.6/dist-packages/xpra/server.py, line 1331, in _clear_keys_pressed (self=<XpraServer(keys_timedout={}, _id_to_window={1: <WindowModel(_input_field=<built-in function input>, _gproperties={'user-friendly-size': (172, 43), 'iconic': False, 'client-window': <gtk.gdk.Window at remote 0x11f8550>, 'size-hints': <WMSizeHints(max_aspect_ratio=None, min_aspect_ratio=None, base_size=(4, 4), min_aspect=None, max_aspect=None, min_size=(10, 17), resize_inc=(6, 13), max_size=None) at remote 0x11ec910>, 'title': u'root@xfportaldemo:~', 'group-leader': None, 'client-machine': u'demo', 'pid': 1638, 'state': frozenset([]), 'strut': None, 'icon-pixmap': None, 'owner': <DesktopManager(_models={<WindowModel(_input_field=<built-in function input>, _gproperties={'user-friendly-size': (179, 54), 'iconic': False, 'client-window': <gtk.gdk.Window at remote 0x11f8690>, 'size-hints': <WMSizeHints(max_aspect_ratio=None, min_aspect_ratio=None, base_size=(4, 4), min_aspect=None, max_aspect=No...(truncated), throwflag=<value optimized out>) at ../Python/ceval.c:2412
#9  0x00000000004a84a0 in fast_function (f=
    Frame 0x7f4de0ba2040, for file /usr/local/lib/python2.6/dist-packages/xpra/server.py, line 2250, in _process_connection_lost (self=<XpraServer(keys_timedout={}, _id_to_window={1: <WindowModel(_input_field=<built-in function input>, _gproperties={'user-friendly-size': (172, 43), 'iconic': False, 'client-window': <gtk.gdk.Window at remote 0x11f8550>, 'size-hints': <WMSizeHints(max_aspect_ratio=None, min_aspect_ratio=None, base_size=(4, 4), min_aspect=None, max_aspect=None, min_size=(10, 17), resize_inc=(6, 13), max_size=None) at remote 0x11ec910>, 'title': u'root@xfportaldemo:~', 'group-leader': None, 'client-machine': u'demo', 'pid': 1638, 'state': frozenset([]), 'strut': None, 'icon-pixmap': None, 'owner': <DesktopManager(_models={<WindowModel(_input_field=<built-in function input>, _gproperties={'user-friendly-size': (179, 54), 'iconic': False, 'client-window': <gtk.gdk.Window at remote 0x11f8690>, 'size-hints': <WMSizeHints(max_aspect_ratio=None, min_aspect_ratio=None, base_size=(4, 4), min_aspect=None, max...(truncated), throwflag=<value optimized out>) at ../Python/ceval.c:3836
#10 call_function (f=
    Frame 0x7f4de0ba2040, for file /usr/local/lib/python2.6/dist-packages/xpra/server.py, line 2250, in _process_connection_lost (self=<XpraServer(keys_timedout={}, _id_to_window={1: <WindowModel(_input_field=<built-in function input>, _gproperties={'user-friendly-size': (172, 43), 'iconic': False, 'client-window': <gtk.gdk.Window at remote 0x11f8550>, 'size-hints': <WMSizeHints(max_aspect_ratio=None, min_aspect_ratio=None, base_size=(4, 4), min_aspect=None, max_aspect=None, min_size=(10, 17), resize_inc=(6, 13), max_size=None) at remote 0x11ec910>, 'title': u'root@xfportaldemo:~', 'group-leader': None, 'client-machine': u'demo', 'pid': 1638, 'state': frozenset([]), 'strut': None, 'icon-pixmap': None, 'owner': <DesktopManager(_models={<WindowModel(_input_field=<built-in function input>, _gproperties={'user-friendly-size': (179, 54), 'iconic': False, 'client-window': <gtk.gdk.Window at remote 0x11f8690>, 'size-hints': <WMSizeHints(max_aspect_ratio=None, min_aspect_ratio=None, base_size=(4, 4), min_aspect=None, max...(truncated), throwflag=<value optimized out>) at ../Python/ceval.c:3771
#11 PyEval_EvalFrameEx (f=
    Frame 0x7f4de0ba2040, for file /usr/local/lib/python2.6/dist-packages/xpra/server.py, line 2250, in _process_connection_lost (self=<XpraServer(keys_timedout={}, _id_to_window={1: <WindowModel(_input_field=<built-in function input>, _gproperties={'user-friendly-size': (172, 43), 'iconic': False, 'client-window': <gtk.gdk.Window at remote 0x11f8550>, 'size-hints': <WMSizeHints(max_aspect_ratio=None, min_aspect_ratio=None, base_size=(4, 4), min_aspect=None, max_aspect=None, min_size=(10, 17), resize_inc=(6, 13), max_size=None) at remote 0x11ec910>, 'title': u'root@xfportaldemo:~', 'group-leader': None, 'client-machine': u'demo', 'pid': 1638, 'state': frozenset([]), 'strut': None, 'icon-pixmap': None, 'owner': <DesktopManager(_models={<WindowModel(_input_field=<built-in function input>, _gproperties={'user-friendly-size': (179, 54), 'iconic': False, 'client-window': <gtk.gdk.Window at remote 0x11f8690>, 'size-hints': <WMSizeHints(max_aspect_ratio=None, min_aspect_ratio=None, base_size=(4, 4), min_aspect=None, max...(truncated), throwflag=<value optimized out>) at ../Python/ceval.c:2412
#12 0x00000000004a84a0 in fast_function (f=
    Frame 0x12a04e0, for file /usr/local/lib/python2.6/dist-packages/xpra/server.py, line 2316, in process_packet (self=<XpraServer(keys_timedout={}, _id_to_window={1: <WindowModel(_input_field=<built-in function input>, _gproperties={'user-friendly-size': (172, 43), 'iconic': False, 'client-window': <gtk.gdk.Window at remote 0x11f8550>, 'size-hints': <WMSizeHints(max_aspect_ratio=None, min_aspect_ratio=None, base_size=(4, 4), min_aspect=None, max_aspect=None, min_size=(10, 17), resize_inc=(6, 13), max_size=None) at remote 0x11ec910>, 'title': u'root@xfportaldemo:~', 'group-leader': None, 'client-machine': u'demo', 'pid': 1638, 'state': frozenset([]), 'strut': None, 'icon-pixmap': None, 'owner': <DesktopManager(_models={<WindowModel(_input_field=<built-in function input>, _gproperties={'user-friendly-size': (179, 54), 'iconic': False, 'client-window': <gtk.gdk.Window at remote 0x11f8690>, 'size-hints': <WMSizeHints(max_aspect_ratio=None, min_aspect_ratio=None, base_size=(4, 4), min_aspect=None, max_aspect=None, m...(truncated), throwflag=<value optimized out>) at ../Python/ceval.c:3836
#13 call_function (f=
    Frame 0x12a04e0, for file /usr/local/lib/python2.6/dist-packages/xpra/server.py, line 2316, in process_packet (self=<XpraServer(keys_timedout={}, _id_to_window={1: <WindowModel(_input_field=<built-in function input>, _gproperties={'user-friendly-size': (172, 43), 'iconic': False, 'client-window': <gtk.gdk.Window at remote 0x11f8550>, 'size-hints': <WMSizeHints(max_aspect_ratio=None, min_aspect_ratio=None, base_size=(4, 4), min_aspect=None, max_aspect=None, min_size=(10, 17), resize_inc=(6, 13), max_size=None) at remote 0x11ec910>, 'title': u'root@xfportaldemo:~', 'group-leader': None, 'client-machine': u'demo', 'pid': 1638, 'state': frozenset([]), 'strut': None, 'icon-pixmap': None, 'owner': <DesktopManager(_models={<WindowModel(_input_field=<built-in function input>, _gproperties={'user-friendly-size': (179, 54), 'iconic': False, 'client-window': <gtk.gdk.Window at remote 0x11f8690>, 'size-hints': <WMSizeHints(max_aspect_ratio=None, min_aspect_ratio=None, base_size=(4, 4), min_aspect=None, max_aspect=None, m...(truncated), throwflag=<value optimized out>) at ../Python/ceval.c:3771
#14 PyEval_EvalFrameEx (f=
    Frame 0x12a04e0, for file /usr/local/lib/python2.6/dist-packages/xpra/server.py, line 2316, in process_packet (self=<XpraServer(keys_timedout={}, _id_to_window={1: <WindowModel(_input_field=<built-in function input>, _gproperties={'user-friendly-size': (172, 43), 'iconic': False, 'client-window': <gtk.gdk.Window at remote 0x11f8550>, 'size-hints': <WMSizeHints(max_aspect_ratio=None, min_aspect_ratio=None, base_size=(4, 4), min_aspect=None, max_aspect=None, min_size=(10, 17), resize_inc=(6, 13), max_size=None) at remote 0x11ec910>, 'title': u'root@xfportaldemo:~', 'group-leader': None, 'client-machine': u'demo', 'pid': 1638, 'state': frozenset([]), 'strut': None, 'icon-pixmap': None, 'owner': <DesktopManager(_models={<WindowModel(_input_field=<built-in function input>, _gproperties={'user-friendly-size': (179, 54), 'iconic': False, 'client-window': <gtk.gdk.Window at remote 0x11f8690>, 'size-hints': <WMSizeHints(max_aspect_ratio=None, min_aspect_ratio=None, base_size=(4, 4), min_aspect=None, max_aspect=None, m...(truncated), throwflag=<value optimized out>) at ../Python/ceval.c:2412
#15 0x00000000004a84a0 in fast_function (f=
    Frame 0x3d1c3830, for file /usr/local/lib/python2.6/dist-packages/xpra/protocol.py, line 515, in close (self=<Protocol(_decompressor=<zlib.Decompress at remote 0x1112290>, _write_queue=<Queue(unfinished_tasks=75147, queue=<collections.deque at remote 0x11e8fa0>, maxsize=0, all_tasks_done=<_Condition(_Verbose__verbose=False, _Condition__lock=<thread.lock at remote 0xf61c30>, acquire=<built-in method acquire of thread.lock object at remote 0xf61c30>, _Condition__waiters=[], release=<built-in method release of thread.lock object at remote 0xf61c30>) at remote 0x11ffb90>, mutex=<thread.lock at remote 0xf61c30>, not_full=<_Condition(_Verbose__verbose=False, _Condition__lock=<thread.lock at remote 0xf61c30>, acquire=<built-in method acquire of thread.lock object at remote 0xf61c30>, _Condition__waiters=[], release=<built-in method release of thread.lock object at remote 0xf61c30>) at remote 0x11ff790>, not_empty=<_Condition(_Verbose__verbose=False, _Condition__lock=<thread.lock at remote 0xf61c30>, acquire=<built-i...(truncated), throwflag=<value optimized out>) at ../Python/ceval.c:3836
#0  0x00007f4e08db73c0 in sem_wait () from /lib/libpthread.so.0
#1  0x00000000004d44e8 in PyThread_acquire_lock (lock=0xd00c30, waitflag=128) at ../Python/thread_pthread.h:349
#2  0x00000000004a2034 in PyEval_RestoreThread (tstate=0xa7a0a0) at ../Python/ceval.c:353
#3  0x00000000004c6ef8 in PyGILState_Ensure () at ../Python/pystate.c:610
#4  0x00007f4e012000e6 in ?? () from /usr/lib/pymodules/python2.6/gtk-2.0/gtk/_gtk.so
#5  0x00007f4e070b292a in g_main_context_check () from /lib/libglib-2.0.so.0
#6  0x00007f4e070b32e3 in ?? () from /lib/libglib-2.0.so.0
#7  0x00007f4e070b3a75 in g_main_loop_run () from /lib/libglib-2.0.so.0
#8  0x00007f4e00b786b7 in gtk_main () from /usr/lib/libgtk-x11-2.0.so.0
#9  0x00007f4e011ffff6 in ?? () from /usr/lib/pymodules/python2.6/gtk-2.0/gtk/_gtk.so
#10 0x00000000004a7cdf in call_function (f=
    Frame 0x1271230, for file /usr/local/lib/python2.6/dist-packages/xpra/server.py, line 1008, in run (self=<XpraServer(keys_timedout={}, _id_to_window={1: <WindowModel(_input_field=<built-in function input>, _gproperties={'user-friendly-size': (172, 43), 'iconic': False, 'client-window': <gtk.gdk.Window at remote 0x11f8550>, 'size-hints': <WMSizeHints(max_aspect_ratio=None, min_aspect_ratio=None, base_size=(4, 4), min_aspect=None, max_aspect=None, min_size=(10, 17), resize_inc=(6, 13), max_size=None) at remote 0x11ec910>, 'title': u'root@xfportaldemo:~', 'group-leader': None, 'client-machine': u'demo', 'pid': 1638, 'state': frozenset([]), 'strut': None, 'icon-pixmap': None, 'owner': <DesktopManager(_models={<WindowModel(_input_field=<built-in function input>, _gproperties={'user-friendly-size': (179, 54), 'iconic': False, 'client-window': <gtk.gdk.Window at remote 0x11f8690>, 'size-hints': <WMSizeHints(max_aspect_ratio=None, min_aspect_ratio=None, base_size=(4, 4), min_aspect=None, max_aspect=None, min_size=(10...(truncated), throwflag=<value optimized out>) at ../Python/ceval.c:3734
#11 PyEval_EvalFrameEx (f=
    Frame 0x1271230, for file /usr/local/lib/python2.6/dist-packages/xpra/server.py, line 1008, in run (self=<XpraServer(keys_timedout={}, _id_to_window={1: <WindowModel(_input_field=<built-in function input>, _gproperties={'user-friendly-size': (172, 43), 'iconic': False, 'client-window': <gtk.gdk.Window at remote 0x11f8550>, 'size-hints': <WMSizeHints(max_aspect_ratio=None, min_aspect_ratio=None, base_size=(4, 4), min_aspect=None, max_aspect=None, min_size=(10, 17), resize_inc=(6, 13), max_size=None) at remote 0x11ec910>, 'title': u'root@xfportaldemo:~', 'group-leader': None, 'client-machine': u'demo', 'pid': 1638, 'state': frozenset([]), 'strut': None, 'icon-pixmap': None, 'owner': <DesktopManager(_models={<WindowModel(_input_field=<built-in function input>, _gproperties={'user-friendly-size': (179, 54), 'iconic': False, 'client-window': <gtk.gdk.Window at remote 0x11f8690>, 'size-hints': <WMSizeHints(max_aspect_ratio=None, min_aspect_ratio=None, base_size=(4, 4), min_aspect=None, max_aspect=None, min_size=(10...(truncated), throwflag=<value optimized out>) at ../Python/ceval.c:2412
#12 0x00000000004a84a0 in fast_function (f=
    Frame 0xd8ea30, for file /usr/local/lib/python2.6/dist-packages/xpra/scripts/server.py, line 394, in run_server (parser=<OptionParser(process_default_values=True, allow_interspersed_args=True, _long_opt={'--exit-with-children': <Option(_long_opts=['--exit-with-children'], help='Terminate server when --start-child command(s) exit', callback_args=None, callback=None, default=False, nargs=None, choices=None, dest='exit_with_children', container=<OptionGroup(_long_opt={...}, title='Server Options', parser=<...>, _short_opt={'-d': <Option(_long_opts=['--debug'], help='List of categories to enable debugging for (or "all")', callback_args=None, callback=None, default=None, nargs=1, choices=None, dest='debug', container=<OptionGroup(_long_opt={...}, title='Advanced Options', parser=<...>, _short_opt={...}, option_list=[<Option(_long_opts=['--password-file'], help='The file containing the password required to connect (useful to secure TCP mode)', callback_args=None, callback=None, default=None, nargs=1, choices=None, ...(truncated), throwflag=<value optimized out>) at ../Python/ceval.c:3836
#13 call_function (f=
    Frame 0xd8ea30, for file /usr/local/lib/python2.6/dist-packages/xpra/scripts/server.py, line 394, in run_server (parser=<OptionParser(process_default_values=True, allow_interspersed_args=True, _long_opt={'--exit-with-children': <Option(_long_opts=['--exit-with-children'], help='Terminate server when --start-child command(s) exit', callback_args=None, callback=None, default=False, nargs=None, choices=None, dest='exit_with_children', container=<OptionGroup(_long_opt={...}, title='Server Options', parser=<...>, _short_opt={'-d': <Option(_long_opts=['--debug'], help='List of categories to enable debugging for (or "all")', callback_args=None, callback=None, default=None, nargs=1, choices=None, dest='debug', container=<OptionGroup(_long_opt={...}, title='Advanced Options', parser=<...>, _short_opt={...}, option_list=[<Option(_long_opts=['--password-file'], help='The file containing the password required to connect (useful to secure TCP mode)', callback_args=None, callback=None, default=None, nargs=1, choices=None, ...(truncated), throwflag=<value optimized out>) at ../Python/ceval.c:3771
#14 PyEval_EvalFrameEx (f=
    Frame 0xd8ea30, for file /usr/local/lib/python2.6/dist-packages/xpra/scripts/server.py, line 394, in run_server (parser=<OptionParser(process_default_values=True, allow_interspersed_args=True, _long_opt={'--exit-with-children': <Option(_long_opts=['--exit-with-children'], help='Terminate server when --start-child command(s) exit', callback_args=None, callback=None, default=False, nargs=None, choices=None, dest='exit_with_children', container=<OptionGroup(_long_opt={...}, title='Server Options', parser=<...>, _short_opt={'-d': <Option(_long_opts=['--debug'], help='List of categories to enable debugging for (or "all")', callback_args=None, callback=None, default=None, nargs=1, choices=None, dest='debug', container=<OptionGroup(_long_opt={...}, title='Advanced Options', parser=<...>, _short_opt={...}, option_list=[<Option(_long_opts=['--password-file'], help='The file containing the password required to connect (useful to secure TCP mode)', callback_args=None, callback=None, default=None, nargs=1, choices=None, ...(truncated), throwflag=<value optimized out>) at ../Python/ceval.c:2412
#15 0x00000000004a95c1 in PyEval_EvalCodeEx (co=0xcdeeb8, globals=<value optimized out>, locals=<value optimized out>, args=0xd90838, argcount=<value optimized out>, kws=<value optimized out>, kwcount=0, defs=0x0,
    defcount=0, closure=0x0) at ../Python/ceval.c:3000
#16 0x00000000004a7752 in fast_function (f=
    Frame 0xb19700, for file /usr/local/lib/python2.6/dist-packages/xpra/scripts/main.py, line 292, in main (script_file='/usr/local/bin/xpra', cmdline=['/usr/local/bin/xpra', 'start', '--no-daemon', '--use-display', ':2'], start_str='\t%prog start DISPLAY\n', list_str='\t%prog list\n', upgrade_str='\t%prog upgrade DISPLAY', note_str='', stop_str='\t%prog stop [DISPLAY]\n', parser=<OptionParser(process_default_values=True, allow_interspersed_args=True, _long_opt={'--exit-with-children': <Option(_long_opts=['--exit-with-children'], help='Terminate server when --start-child command(s) exit', callback_args=None, callback=None, default=False, nargs=None, choices=None, dest='exit_with_children', container=<OptionGroup(_long_opt={...}, title='Server Options', parser=<...>, _short_opt={'-d': <Option(_long_opts=['--debug'], help='List of categories to enable debugging for (or "all")', callback_args=None, callback=None, default=None, nargs=1, choices=None, dest='debug', container=<OptionGroup(_long_opt={...}, title='Advan...(truncated), throwflag=<value optimized out>) at ../Python/ceval.c:3846
#17 call_function (f=
    Frame 0xb19700, for file /usr/local/lib/python2.6/dist-packages/xpra/scripts/main.py, line 292, in main (script_file='/usr/local/bin/xpra', cmdline=['/usr/local/bin/xpra', 'start', '--no-daemon', '--use-display', ':2'], start_str='\t%prog start DISPLAY\n', list_str='\t%prog list\n', upgrade_str='\t%prog upgrade DISPLAY', note_str='', stop_str='\t%prog stop [DISPLAY]\n', parser=<OptionParser(process_default_values=True, allow_interspersed_args=True, _long_opt={'--exit-with-children': <Option(_long_opts=['--exit-with-children'], help='Terminate server when --start-child command(s) exit', callback_args=None, callback=None, default=False, nargs=None, choices=None, dest='exit_with_children', container=<OptionGroup(_long_opt={...}, title='Server Options', parser=<...>, _short_opt={'-d': <Option(_long_opts=['--debug'], help='List of categories to enable debugging for (or "all")', callback_args=None, callback=None, default=None, nargs=1, choices=None, dest='debug', container=<OptionGroup(_long_opt={...}, title='Advan...(truncated), throwflag=<value optimized out>) at ../Python/ceval.c:3771
#18 PyEval_EvalFrameEx (f=
    Frame 0xb19700, for file /usr/local/lib/python2.6/dist-packages/xpra/scripts/main.py, line 292, in main (script_file='/usr/local/bin/xpra', cmdline=['/usr/local/bin/xpra', 'start', '--no-daemon', '--use-display', ':2'], start_str='\t%prog start DISPLAY\n', list_str='\t%prog list\n', upgrade_str='\t%prog upgrade DISPLAY', note_str='', stop_str='\t%prog stop [DISPLAY]\n', parser=<OptionParser(process_default_values=True, allow_interspersed_args=True, _long_opt={'--exit-with-children': <Option(_long_opts=['--exit-with-children'], help='Terminate server when --start-child command(s) exit', callback_args=None, callback=None, default=False, nargs=None, choices=None, dest='exit_with_children', container=<OptionGroup(_long_opt={...}, title='Server Options', parser=<...>, _short_opt={'-d': <Option(_long_opts=['--debug'], help='List of categories to enable debugging for (or "all")', callback_args=None, callback=None, default=None, nargs=1, choices=None, dest='debug', container=<OptionGroup(_long_opt={...}, title='Advan...(truncated), throwflag=<value optimized out>) at ../Python/ceval.c:2412
#19 0x00000000004a95c1 in PyEval_EvalCodeEx (co=0x7f4e090fd3f0, globals=<value optimized out>, locals=<value optimized out>, args=0x7f4e091b7798, argcount=<value optimized out>, kws=<value optimized out>, kwcount=0, defs=
    0x0, defcount=0, closure=0x0) at ../Python/ceval.c:3000
#20 0x00000000004a7752 in fast_function (f=Frame 0xb07200, for file /usr/local/bin/xpra, line 6, in <module> (), throwflag=<value optimized out>) at ../Python/ceval.c:3846
#21 call_function (f=Frame 0xb07200, for file /usr/local/bin/xpra, line 6, in <module> (), throwflag=<value optimized out>) at ../Python/ceval.c:3771
#0  0x00007f4e08db73c0 in sem_wait () from /lib/libpthread.so.0
#1  0x00000000004d44e8 in PyThread_acquire_lock (lock=0x46eb8fe0, waitflag=128) at ../Python/thread_pthread.h:349
#2  0x00000000004d8982 in lock_PyThread_acquire_lock (self=0xf61fa8, args=<value optimized out>) at ../Modules/threadmodule.c:47
#3  0x00000000004a7ba5 in call_function (f=
    Frame 0x7f4de0ba1730, for file /usr/lib/python2.6/threading.py, line 239, in wait (self=<_Condition(_Verbose__verbose=False, _Condition__lock=<thread.lock at remote 0xf61c30>, acquire=<built-in method acquire of thread.lock object at remote 0xf61c30>, _Condition__waiters=[<thread.lock at remote 0xf61fa8>], release=<built-in method release of thread.lock object at remote 0xf61c30>) at remote 0x11ffc50>, timeout=None, waiter=<thread.lock at remote 0xf61fa8>, saved_state=None), throwflag=<value optimized out>) at ../Python/ceval.c:3750
#4  PyEval_EvalFrameEx (f=
    Frame 0x7f4de0ba1730, for file /usr/lib/python2.6/threading.py, line 239, in wait (self=<_Condition(_Verbose__verbose=False, _Condition__lock=<thread.lock at remote 0xf61c30>, acquire=<built-in method acquire of thread.lock object at remote 0xf61c30>, _Condition__waiters=[<thread.lock at remote 0xf61fa8>], release=<built-in method release of thread.lock object at remote 0xf61c30>) at remote 0x11ffc50>, timeout=None, waiter=<thread.lock at remote 0xf61fa8>, saved_state=None), throwflag=<value optimized out>) at ../Python/ceval.c:2412
#5  0x00000000004a95c1 in PyEval_EvalCodeEx (co=0xc48468, globals=<value optimized out>, locals=<value optimized out>, args=0x2, argcount=<value optimized out>, kws=<value optimized out>, kwcount=0, defs=0xc51f28,
    defcount=1, closure=0x0) at ../Python/ceval.c:3000
#6  0x00000000004a7752 in fast_function (f=
    Frame 0x451b0170, for file /usr/lib/python2.6/Queue.py, line 168, in get (self=<Queue(unfinished_tasks=75147, queue=<collections.deque at remote 0x11e8fa0>, maxsize=0, all_tasks_done=<_Condition(_Verbose__verbose=False, _Condition__lock=<thread.lock at remote 0xf61c30>, acquire=<built-in method acquire of thread.lock object at remote 0xf61c30>, _Condition__waiters=[], release=<built-in method release of thread.lock object at remote 0xf61c30>) at remote 0x11ffb90>, mutex=<thread.lock at remote 0xf61c30>, not_full=<_Condition(_Verbose__verbose=False, _Condition__lock=<thread.lock at remote 0xf61c30>, acquire=<built-in method acquire of thread.lock object at remote 0xf61c30>, _Condition__waiters=[], release=<built-in method release of thread.lock object at remote 0xf61c30>) at remote 0x11ff790>, not_empty=<_Condition(_Verbose__verbose=False, _Condition__lock=<thread.lock at remote 0xf61c30>, acquire=<built-in method acquire of thread.lock object at remote 0xf61c30>, _Condition__waiters=[<thread.lock at remote 0x...(truncated), throwflag=<value optimized out>) at ../Python/ceval.c:3846
#7  call_function (f=
    Frame 0x451b0170, for file /usr/lib/python2.6/Queue.py, line 168, in get (self=<Queue(unfinished_tasks=75147, queue=<collections.deque at remote 0x11e8fa0>, maxsize=0, all_tasks_done=<_Condition(_Verbose__verbose=False, _Condition__lock=<thread.lock at remote 0xf61c30>, acquire=<built-in method acquire of thread.lock object at remote 0xf61c30>, _Condition__waiters=[], release=<built-in method release of thread.lock object at remote 0xf61c30>) at remote 0x11ffb90>, mutex=<thread.lock at remote 0xf61c30>, not_full=<_Condition(_Verbose__verbose=False, _Condition__lock=<thread.lock at remote 0xf61c30>, acquire=<built-in method acquire of thread.lock object at remote 0xf61c30>, _Condition__waiters=[], release=<built-in method release of thread.lock object at remote 0xf61c30>) at remote 0x11ff790>, not_empty=<_Condition(_Verbose__verbose=False, _Condition__lock=<thread.lock at remote 0xf61c30>, acquire=<built-in method acquire of thread.lock object at remote 0xf61c30>, _Condition__waiters=[<thread.lock at remote 0x...(truncated), throwflag=<value optimized out>) at ../Python/ceval.c:3771
#8  PyEval_EvalFrameEx (f=
    Frame 0x451b0170, for file /usr/lib/python2.6/Queue.py, line 168, in get (self=<Queue(unfinished_tasks=75147, queue=<collections.deque at remote 0x11e8fa0>, maxsize=0, all_tasks_done=<_Condition(_Verbose__verbose=False, _Condition__lock=<thread.lock at remote 0xf61c30>, acquire=<built-in method acquire of thread.lock object at remote 0xf61c30>, _Condition__waiters=[], release=<built-in method release of thread.lock object at remote 0xf61c30>) at remote 0x11ffb90>, mutex=<thread.lock at remote 0xf61c30>, not_full=<_Condition(_Verbose__verbose=False, _Condition__lock=<thread.lock at remote 0xf61c30>, acquire=<built-in method acquire of thread.lock object at remote 0xf61c30>, _Condition__waiters=[], release=<built-in method release of thread.lock object at remote 0xf61c30>) at remote 0x11ff790>, not_empty=<_Condition(_Verbose__verbose=False, _Condition__lock=<thread.lock at remote 0xf61c30>, acquire=<built-in method acquire of thread.lock object at remote 0xf61c30>, _Condition__waiters=[<thread.lock at remote 0x...(truncated), throwflag=<value optimized out>) at ../Python/ceval.c:2412
#9  0x00000000004a95c1 in PyEval_EvalCodeEx (co=0xcd0300, globals=<value optimized out>, locals=<value optimized out>, args=0x3, argcount=<value optimized out>, kws=<value optimized out>, kwcount=0, defs=0xcd3188,
    defcount=2, closure=0x0) at ../Python/ceval.c:3000
#10 0x00000000004a7752 in fast_function (f=
    Frame 0x1273da0, for file /usr/local/lib/python2.6/dist-packages/xpra/protocol.py, line 298, in _write_thread_loop (self=<Protocol(_decompressor=<zlib.Decompress at remote 0x1112290>, _write_queue=<Queue(unfinished_tasks=75147, queue=<collections.deque at remote 0x11e8fa0>, maxsize=0, all_tasks_done=<_Condition(_Verbose__verbose=False, _Condition__lock=<thread.lock at remote 0xf61c30>, acquire=<built-in method acquire of thread.lock object at remote 0xf61c30>, _Condition__waiters=[], release=<built-in method release of thread.lock object at remote 0xf61c30>) at remote 0x11ffb90>, mutex=<thread.lock at remote 0xf61c30>, not_full=<_Condition(_Verbose__verbose=False, _Condition__lock=<thread.lock at remote 0xf61c30>, acquire=<built-in method acquire of thread.lock object at remote 0xf61c30>, _Condition__waiters=[], release=<built-in method release of thread.lock object at remote 0xf61c30>) at remote 0x11ff790>, not_empty=<_Condition(_Verbose__verbose=False, _Condition__lock=<thread.lock at remote 0xf61c30>, acqu...(truncated), throwflag=<value optimized out>) at ../Python/ceval.c:3846
#11 call_function (f=
    Frame 0x1273da0, for file /usr/local/lib/python2.6/dist-packages/xpra/protocol.py, line 298, in _write_thread_loop (self=<Protocol(_decompressor=<zlib.Decompress at remote 0x1112290>, _write_queue=<Queue(unfinished_tasks=75147, queue=<collections.deque at remote 0x11e8fa0>, maxsize=0, all_tasks_done=<_Condition(_Verbose__verbose=False, _Condition__lock=<thread.lock at remote 0xf61c30>, acquire=<built-in method acquire of thread.lock object at remote 0xf61c30>, _Condition__waiters=[], release=<built-in method release of thread.lock object at remote 0xf61c30>) at remote 0x11ffb90>, mutex=<thread.lock at remote 0xf61c30>, not_full=<_Condition(_Verbose__verbose=False, _Condition__lock=<thread.lock at remote 0xf61c30>, acquire=<built-in method acquire of thread.lock object at remote 0xf61c30>, _Condition__waiters=[], release=<built-in method release of thread.lock object at remote 0xf61c30>) at remote 0x11ff790>, not_empty=<_Condition(_Verbose__verbose=False, _Condition__lock=<thread.lock at remote 0xf61c30>, acqu...(truncated), throwflag=<value optimized out>) at ../Python/ceval.c:3771
#12 PyEval_EvalFrameEx (f=
    Frame 0x1273da0, for file /usr/local/lib/python2.6/dist-packages/xpra/protocol.py, line 298, in _write_thread_loop (self=<Protocol(_decompressor=<zlib.Decompress at remote 0x1112290>, _write_queue=<Queue(unfinished_tasks=75147, queue=<collections.deque at remote 0x11e8fa0>, maxsize=0, all_tasks_done=<_Condition(_Verbose__verbose=False, _Condition__lock=<thread.lock at remote 0xf61c30>, acquire=<built-in method acquire of thread.lock object at remote 0xf61c30>, _Condition__waiters=[], release=<built-in method release of thread.lock object at remote 0xf61c30>) at remote 0x11ffb90>, mutex=<thread.lock at remote 0xf61c30>, not_full=<_Condition(_Verbose__verbose=False, _Condition__lock=<thread.lock at remote 0xf61c30>, acquire=<built-in method acquire of thread.lock object at remote 0xf61c30>, _Condition__waiters=[], release=<built-in method release of thread.lock object at remote 0xf61c30>) at remote 0x11ff790>, not_empty=<_Condition(_Verbose__verbose=False, _Condition__lock=<thread.lock at remote 0xf61c30>, acqu...(truncated), throwflag=<value optimized out>) at ../Python/ceval.c:2412
#13 0x00000000004a95c1 in PyEval_EvalCodeEx (co=0xcb2828, globals=<value optimized out>, locals=<value optimized out>, args=0x1, argcount=<value optimized out>, kws=<value optimized out>, kwcount=0, defs=0x0, defcount=0,
    closure=0x0) at ../Python/ceval.c:3000
#14 0x0000000000538b0d in function_call (func=<function at remote 0xcddcf8>, arg=
    (<Protocol(_decompressor=<zlib.Decompress at remote 0x1112290>, _write_queue=<Queue(unfinished_tasks=75147, queue=<collections.deque at remote 0x11e8fa0>, maxsize=0, all_tasks_done=<_Condition(_Verbose__verbose=False, _Condition__lock=<thread.lock at remote 0xf61c30>, acquire=<built-in method acquire of thread.lock object at remote 0xf61c30>, _Condition__waiters=[], release=<built-in method release of thread.lock object at remote 0xf61c30>) at remote 0x11ffb90>, mutex=<thread.lock at remote 0xf61c30>, not_full=<_Condition(_Verbose__verbose=False, _Condition__lock=<thread.lock at remote 0xf61c30>, acquire=<built-in method acquire of thread.lock object at remote 0xf61c30>, _Condition__waiters=[], release=<built-in method release of thread.lock object at remote 0xf61c30>) at remote 0x11ff790>, not_empty=<_Condition(_Verbose__verbose=False, _Condition__lock=<thread.lock at remote 0xf61c30>, acquire=<built-in method acquire of thread.lock object at remote 0xf61c30>, _Condition__waiters=[<thread.lock at remote 0xf6...(truncated), kw={}) at ../Objects/funcobject.c:524
#15 0x000000000041ef47 in PyObject_Call (func=<function at remote 0xcddcf8>, arg=<unknown at remote 0x80>, kw=0x0) at ../Objects/abstract.c:2492

Please let me know if you need more information.

Thanks



Tue, 19 Jun 2012 13:49:27 GMT - Antoine Martin: status changed

You're right, this thread does look suspicious. I don't understand why this call would fail and timeout as it seems to do.

XQueryKeymap should return immediately.


Tue, 19 Jun 2012 14:29:49 GMT - ahuillet:


Tue, 19 Jun 2012 14:36:27 GMT - ahuillet:

Reproducing is actually very easy.

You will need X 1.7.7 from Debian stable. The issue can be reproduced with Xvfb as well as Xdummy.

  1. Start Xpra (xpra start :12)
  2. Start xterm (DISPLAY=:12 xterm)
  3. Attach to the session with the while loop - xterm appears
  4. ctrl+c in the terminal to detach the session
  5. Xpra tries to attach again and deadlocks

Wed, 20 Jun 2012 13:21:52 GMT - Antoine Martin: priority, version changed

Hah, can you help me narrow it down by figuring out if it is the client or server that needs to be running debian stale?

I obviously cannot reproduce this here with Xorg 1.11.4 Is this a regression? (did it used to work with 0.0.7.3? for example? or even 0.0.6?) The only thing I can think of that has changed in the Xorg to xpra communication area is #106, I don't see how it would make any difference, but it is worth removing "-nolisten tcp" from the xpra command line by using the "--xvfb=" switch to see if it makes any difference.

Otherwise, this is going to be fun bisecting Xorg all the way back to the outdated version in debian...


Tue, 03 Jul 2012 18:20:57 GMT - Antoine Martin: owner, status changed

See above. Also, this may well be fixed by r1005


Tue, 03 Jul 2012 18:27:06 GMT - ahuillet:

The server is running debian stable, the client is running archlinux.


Fri, 20 Jul 2012 16:45:29 GMT - ahuillet: status changed; resolution set

I haven't been able to reproduce the crash. Let's consider it fixed.


Sat, 23 Jan 2021 04:46:50 GMT - migration script:

this ticket has been moved to: https://github.com/Xpra-org/xpra/issues/148