#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 (8)
comment:1 Changed 9 years ago by
Status: | new → accepted |
---|
comment:2 Changed 9 years ago by
- 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
comment:3 Changed 9 years ago by
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.
- Start Xpra (xpra start :12)
- Start xterm (DISPLAY=:12 xterm)
- Attach to the session with the while loop - xterm appears
- ctrl+c in the terminal to detach the session
- Xpra tries to attach again and deadlocks
comment:4 Changed 9 years ago by
Priority: | major → critical |
---|---|
Version: | 0.1.0 → trunk |
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 9 years ago by
Owner: | changed from Antoine Martin to ahuillet |
---|---|
Status: | accepted → assigned |
See above. Also, this may well be fixed by r1005
comment:6 Changed 9 years ago by
The server is running debian stable, the client is running archlinux.
comment:7 Changed 9 years ago by
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
I haven't been able to reproduce the crash. Let's consider it fixed.
comment:8 Changed 6 weeks ago by
this ticket has been moved to: https://github.com/Xpra-org/xpra/issues/148
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.lsof
or other)xpra --use-display
as there may well be a bug in "xpra upgrade
" at the moment..), does the new xpra server work properly?while true; do xpra attach ...& sleep 2; done