xpra icon
Bug tracker and wiki

Opened 8 years ago

Closed 8 years ago

#148 closed defect (fixed)

Xpra server deadlocks

Reported by: ahuillet Owned by: ahuillet
Priority: critical Milestone: 0.4
Component: server Version: trunk
Keywords: Cc:

Description

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

Change History (7)

comment:1 Changed 8 years ago by Antoine Martin

Status: newaccepted

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.

  • Can you check the number of connections to that Xvfb server? (using lsof or other)
  • What are the clients of this Xvfb server? Just one app and xpra? (does this problem happen with one app in particular? or more/less often with one app?)
  • Can you make new connections to this Xvfb server (say start a new xterm on it)
  • If you "upgrade" the xpra server (or using xpra --use-display as there may well be a bug in "xpra upgrade" at the moment..), does the new xpra server work properly?
  • Can you reproduce this with Xdummy? (or was this Xdummy already?)
  • Does this manifest itself more if you constantly connect a new client to this server? ie: while true; do xpra attach ...& sleep 2; done
  • How do I reproduce this?

comment:2 Changed 8 years ago by ahuillet

  • I don't know how to find out the number of connections. lsof shows /tmp/.X11-unix/X2 only once (for process Xorg), so I'd say there are none, but there are several applications running on this X server so ????
  • Xterm, several VirtualBox VMs are running in the session
  • I can start new applications on this server
  • as long as I quit the xpra server and start it again, it will work... the while loop helps: on the second or third reconnect attempt, deadlock happens
  • This is with Xdummy and X.Org X Server 1.7.7
  • I'm not entirely sure how you reproduce, I'll try to find a simple recipe
Last edited 8 years ago by Antoine Martin (previous) (diff)

comment:3 Changed 8 years ago by 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

comment:4 Changed 8 years ago by Antoine Martin

Priority: majorcritical
Version: 0.1.0trunk

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...

comment:5 Changed 8 years ago by Antoine Martin

Owner: changed from Antoine Martin to ahuillet
Status: acceptedassigned

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

comment:6 Changed 8 years ago by ahuillet

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

comment:7 Changed 8 years ago by ahuillet

Resolution: fixed
Status: assignedclosed

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

Note: See TracTickets for help on using tickets.