Xpra: Ticket #396: xpra server hangs on disconnect

Here is the issue, with xpra 0.9.7

1) Start an xpra server (e.g. xpra start :101 on serverhost)

2) Start an application on the server on the xpra display (e.g. DISPLAY=:101 someapplication)

3) Switch to a client machine and attach to the server xpra display (e.g. xpra attach ssh:serverhost:101)

4) Disconnect the client (e.g. disconnect from the icon in the tray)

5) Try to reconnect from the client (e.g. xpra attach ssh:serverhost:101)

On my systems it is impossible to reconnect, because the server does not answer anymore. Its process is still there (I can see it with ps) and so is the extra xpra xserver, but the xpra process hangs.

If at this point I run xpra list on the server, the instance :101 is listed as live, but if I run xpra info from the server, this just hangs.

This happens with both machines on kubuntu 13.04 64 bit



Sat, 20 Jul 2013 14:03:15 GMT - Antoine Martin: status changed

Please attach server logs, if possible in debug mode "-d all".

I have tested just today with Ubuntu 13.04, and apart from xvfb problems (solved by using Xvfb instead of Xdummy), I have seen no such issue.


Sun, 21 Jul 2013 08:31:13 GMT - Antoine Martin:

FWIW: I've seen the same symptom after running gtkperf repeatedly in a tight loop, with another client doing "xpra info" in a loop.

It was stuck in gtk main, waiting for a response from the X11 server. So maybe we are processing events from a non UI thread?


Sun, 21 Jul 2013 08:31:57 GMT - Antoine Martin: priority, status changed; milestone set


Sun, 21 Jul 2013 10:37:10 GMT - Antoine Martin:

Here's the Xorg backtrace:

Program received signal SIGPIPE, Broken pipe.
0x000000372aeec350 in __libc_writev (fd=9, vector=0x7fffde2e7ce0, count=1) \
    at ../sysdeps/unix/sysv/linux/writev.c:55
55	      result = INLINE_SYSCALL (writev, 3, fd, CHECK_N (vector, count), count);
(gdb) bt
#0  0x000000372aeec350 in __libc_writev (fd=9, vector=0x7fffde2e7ce0, count=1) \
    at ../sysdeps/unix/sysv/linux/writev.c:55
#1  0x0000000000475317 in _XSERVTransSocketWritev ()
#2  0x000000000046c16d in FlushClient ()
#3  0x000000000046aa4b in CloseDownConnection ()
#4  0x00000000004364be in CloseDownClient ()
#5  0x0000000000436f6e in Dispatch ()
#6  0x000000000042646a in main ()

A SIGPIPE in closing a client connection. Could be gtkperf or it could be the xpra server..


Edit: apparently, I should not have trapped this error with gdb... this is just normal behaviour when the client dies, so the xpra server died.

Here's what the server was doing at the time of crash:

2013-07-21 17:34:49,275 do_child_configure_request_event(<AdHocStruct object, contents: {'delivered_to': <gtk.gdk.Window object at 0x7ff5b8036730 (GdkWindow at 0x1f58120)>, 'send_event': 0, 'value_mask': 12L, 'detail': 0, 'height': 300, 'width': 545, 'window': <gtk.gdk.Window object at 0x7ff5a8096190 (GdkWindow at 0x1f58000)>, 'above': None, 'y': 0, 'x': 0, 'serial': 14942L, 'border_width': 0, 'type': 23, 'display': <gtk.gdk.Display object at 0x7ff5d2bd4af0 (GdkDisplayX11 at 0x1b1e1f0)>}>)
2013-07-21 17:34:49,279 send_cursor() cursor=[246, 187, 48, 48, 22, 22, 2L, '9216 bytes', 'xterm']
2013-07-21 17:34:49,284 world window got focus
2013-07-21 17:34:49,285 Connection lost
2013-07-21 17:34:49,286 enable_rencode()
2013-07-21 17:34:49,286 process_hello: capabilities={'username': 'antoine', 'randr_notify': 0, 'platform.release': '3.9.9-302.fc19.x86_64', 'build.cpu': 'x86_64', 'encoding.vpx.version': 3, 'keyboard': 0, 'rencode.version': '1.0.2', 'raw_packets': 1, 'build.bit': '64bit', 'aliases': {'lost-window': 1, 'configure-override-redirect': 2, 'draw': 3, 'disconnect': 17, 'notify_close': 4, 'bell': 5, 'new-override-redirect': 6, 'challenge': 15, 'ping': 7, 'cursor': 8, 'set_deflate': 16, 'ping_echo': 9, 'notify_show': 10, 'connection-lost': 14, 'new-window': 11, 'gibberish': 18, 'hello': 12, 'window-metadata': 13}, 'uuid': '88d777f64f61de0d81f1b4564f47be588088feb3', 'hostname': 'laptop', 'namespace': 1, 'encoding.PIL.version': '1.1.7', 'platform': 'linux2', 'version': '0.10.0', 'chunked_compression': 1, 'encoding.x264.version': 130, 'encoding.avcodec.version': 'Lavc54.92.100', 'encoding.webp.version': '0.2.2', 'platform.machine': 'x86_64', 'info_request': 1, 'platform.processor': 'x86_64', 'build.on': 'laptop', 'rencode': 1, 'build.date': '2013-07-21', 'name': 'Antoine Martin', 'windows': 0, 'build.revision': '3780', 'client_type': 'Python/GObject', 'build.local_modifications': '6', 'build.by': 'root', 'encoding.swscale.version': 'SwS2.2.100', 'python.version': [2, 7, 5]}
2013-07-21 17:34:49,286 identical remote version: 0.10.0
2013-07-21 17:34:49,287 processing info request from SocketConnection(/home/antoine/.xpra/laptop-10)
2013-07-21 17:34:49,289 _focus(ServerSource(Protocol(SocketConnection(/home/antoine/.xpra/laptop-10))), 0, ()) has_focus=2
2013-07-21 17:34:49,289 reset_focus() 2 / None had focus
2013-07-21 17:34:49,290 widget with focus: None
2013-07-21 17:34:49,290 Focus -> world window
2013-07-21 17:34:49,290 sending WM_TAKE_FOCUS: <gtk.gdk.Window object at 0x1db0eb0 (GdkWindow at 0x1b47240)>, 242335578L
2013-07-21 17:34:49,291 _focus(ServerSource(Protocol(SocketConnection(/home/antoine/.xpra/laptop-10))), 1, ()) has_focus=0
2013-07-21 17:34:49,291 focus(ServerSource(Protocol(SocketConnection(/home/antoine/.xpra/laptop-10))), 1, ()) giving focus to <WindowModel object at 0x1c22d20 (xpra+x11+gtk_x11+window+WindowModel at 0x189d2e0)>
2013-07-21 17:34:49,291 Giving focus to client
2013-07-21 17:34:49,292 ... using XSetInputFocus
2013-07-21 17:34:49,298 keyboard info: keycode.exclamdown=10
(...)
keysym.copyright=54
2013-07-21 17:34:49,304 window_types=[<GdkAtom 0x66 = '_NET_WM_WINDOW_TYPE_NORMAL'>]
2013-07-21 17:34:49,305 window_types=['NORMAL']
2013-07-21 17:34:49,305 window_types=['_NET_WM_WINDOW_TYPE_NORMAL']
2013-07-21 17:34:49,305 window_types=['NORMAL']
Xpra: Fatal IO error 11 (Resource temporarily unavailable) on X server :10.

So we have:


Sun, 21 Jul 2013 10:59:28 GMT - Antoine Martin:

The window_types was probably the source of this particular crash: r3918 should fix this problem.

Now I have the client crash:

get_client_window_class({'fullscreen': False, 'has-alpha': False, 'xid': '0xa0182d', 'pid': 12505, \
    'window-type': ('COMBO',), 'maximized': False, 'transient-for': 407, 'override-redirect': True}, \
    True) \
    GLClientWindowClass=<class 'xpra.client.gl.gl_client_window.GLClientWindow'>, \
    opengl_enabled=True, mmap_enabled=False, window_types=('COMBO',), encoding=webp
<class 'xpra.client.gtk2.border_client_window.BorderClientWindow'> \
    (<XpraClient object at 0x1a4baf0 (xpra+client+gtk2+client+XpraClient at 0x123ccc0)>, \
    <gtk.gdk.Window object at 0x7f4d0401c320 (GdkWindow at 0x2990ea0)>, \
    473, 116, 158, 267, 270, \
    {'fullscreen': False, 'has-alpha': False, 'xid': '0xa0182d', 'pid': 12505, \
     'window-type': ('COMBO',), 'maximized': False, 'transient-for': 407, 'override-redirect': True
    }, True, {}, 0)
update_metadata({'fullscreen': False, 'has-alpha': False, 'xid': '0xa0182d', 'pid': 12505, \
    'window-type': ('COMBO',), 'maximized': False, 'transient-for': 407, 'override-redirect': True})
found transient-for: 407 / <BorderClientWindow object at 0x7f4d04016aa0 \
    (xpra+client+gtk2+border_client_window+BorderClientWindow at 0x1cc9ce0)>
set_window_type(['COMBO'])
make_new_backing(<class 'xpra.client.gtk2.pixmap_backing.PixmapBacking'>, 267, 270) \
    effective backing class=<class 'xpra.client.gtk2.pixmap_backing.PixmapBacking'>, alpha=False
make_new_backing(<class 'xpra.client.gtk2.pixmap_backing.PixmapBacking'>, 267, 270) calling init
window_state_updated(<BorderClientWindow object at 0x7f4d0401c3c0 \
    (xpra+client+gtk2+border_client_window+BorderClientWindow at 0x2911500)>, \
    <gtk.gdk.Event at 0x7f4d04019238: GDK_WINDOW_STATE>) \
    new_window_state=<flags 0 of type GdkWindowState>, fullscreen=False, maximized=False
Got configure event: <gtk.gdk.Event at 0x7f4d04019238: GDK_CONFIGURE x=116, y=158, width=267, height=270>
Got map event: <gtk.gdk.Event at 0x7f4d04019238: GDK_MAP> - OR=True
_unfocus() wid=473
<class 'xpra.client.gtk2.pixmap_backing.PixmapBacking'>.close() video_decoder=None
group leader=<gtk.gdk.Window object at 0x7f4d0401c320 (GdkWindow at 0x2990ea0)>
windows for group leader <gtk.gdk.Window object at 0x7f4d0401c320 (GdkWindow at 0x2990ea0)>: [473]
last window for refs [12505] is gone, \
    destroying the group leader <gtk.gdk.Window object at 0x7f4d0401c320 (GdkWindow at 0x2990ea0)>
new hidden group leader window <gtk.gdk.Window object at 0x7f4d0401c410 (GdkWindow at 0x2991120)> for ref=12505
get_client_window_class({'fullscreen': False, 'has-alpha': False, 'xid': '0xa0182d', 'pid': 12505, \
    'window-type': ('COMBO',), 'maximized': False, 'override-redirect': True}, \
    True) \
    GLClientWindowClass=<class 'xpra.client.gl.gl_client_window.GLClientWindow'>, \
    opengl_enabled=True, mmap_enabled=False, window_types=('COMBO',), encoding=webp
<class 'xpra.client.gtk2.border_client_window.BorderClientWindow'> \
    (<XpraClient object at 0x1a4baf0 (xpra+client+gtk2+client+XpraClient at 0x123ccc0)>, \
    <gtk.gdk.Window object at 0x7f4d0401c410 (GdkWindow at 0x2991120)>, \
    476, 116, 158, 267, 270, \
    {'fullscreen': False, 'has-alpha': False, 'xid': '0xa0182d', 'pid': 12505, \
     'window-type': ('COMBO',), 'maximized': False, 'override-redirect': True\
    }, True, {}, 0)
update_metadata({'fullscreen': False, 'has-alpha': False, 'xid': '0xa0182d', 'pid': 12505, \
    'window-type': ('COMBO',), 'maximized': False, 'override-redirect': True})
set_window_type(['COMBO'])
make_new_backing(<class 'xpra.client.gtk2.pixmap_backing.PixmapBacking'>, 267, 270) \
    effective backing class=<class 'xpra.client.gtk2.pixmap_backing.PixmapBacking'>, alpha=False
make_new_backing(<class 'xpra.client.gtk2.pixmap_backing.PixmapBacking'>, 267, 270) calling init
window_state_updated(<BorderClientWindow object at 0x7f4d0401c460 \
    (xpra+client+gtk2+border_client_window+BorderClientWindow at 0x1cc9460)>, \
    <gtk.gdk.Event at 0x7f4d04019260: GDK_WINDOW_STATE>) \
    new_window_state=<flags 0 of type GdkWindowState>, fullscreen=False, maximized=False
_unfocus() wid=476
<class 'xpra.client.gtk2.pixmap_backing.PixmapBacking'>.close() video_decoder=None
group leader=<gtk.gdk.Window object at 0x7f4d0401c410 (GdkWindow at 0x2991120)>
windows for group leader <gtk.gdk.Window object at 0x7f4d0401c410 (GdkWindow at 0x2991120)>: [476]
last window for refs [12505] is gone, \
    destroying the group leader <gtk.gdk.Window object at 0x7f4d0401c410 (GdkWindow at 0x2991120)>
new hidden group leader window <gtk.gdk.Window object at 0x7f4d0401c460 (GdkWindow at 0x29915a0)> for ref=12505
get_client_window_class({'fullscreen': False, 'has-alpha': False, 'xid': '0xa0182d', 'pid': 12505, \
    'window-type': ('COMBO',), 'maximized': False, 'override-redirect': True}, \
    True) \
    GLClientWindowClass=<class 'xpra.client.gl.gl_client_window.GLClientWindow'>, \
    opengl_enabled=True, mmap_enabled=False, window_types=('COMBO',), encoding=webp
<class 'xpra.client.gtk2.border_client_window.BorderClientWindow'> \
    (<XpraClient object at 0x1a4baf0 (xpra+client+gtk2+client+XpraClient at 0x123ccc0)>, \
    <gtk.gdk.Window object at 0x7f4d0401c460 (GdkWindow at 0x29915a0)>, \
    477, 116, 158, 267, 270, \
    {'fullscreen': False, 'has-alpha': False, 'xid': '0xa0182d', 'pid': 12505, \
     'window-type': ('COMBO',), 'maximized': False, 'override-redirect': True
    }, True, {}, 0)
update_metadata({'fullscreen': False, 'has-alpha': False, 'xid': '0xa0182d', 'pid': 12505, \
    'window-type': ('COMBO',), 'maximized': False, 'override-redirect': True})
set_window_type(['COMBO'])
make_new_backing(<class 'xpra.client.gtk2.pixmap_backing.PixmapBacking'>, 267, 270) \
    effective backing class=<class 'xpra.client.gtk2.pixmap_backing.PixmapBacking'>, alpha=False
make_new_backing(<class 'xpra.client.gtk2.pixmap_backing.PixmapBacking'>, 267, 270) calling init
window_state_updated(<BorderClientWindow object at 0x7f4d0401c500 \
    (xpra+client+gtk2+border_client_window+BorderClientWindow at 0x1cc9460)>, \
    <gtk.gdk.Event at 0x7f4d04019260: GDK_WINDOW_STATE>) \
        new_window_state=<flags 0 of type GdkWindowState>, fullscreen=False, maximized=False
Got configure event: <gtk.gdk.Event at 0x7f4d04019260: GDK_CONFIGURE x=116, y=158, width=267, height=270>
Got map event: <gtk.gdk.Event at 0x7f4d04019260: GDK_MAP> - OR=True
_unfocus() wid=478
<class 'xpra.client.gtk2.pixmap_backing.PixmapBacking'>.close() video_decoder=None
group leader=<gtk.gdk.Window object at 0x7f4d0401c4b0 (GdkWindow at 0x29917e0)>
windows for group leader <gtk.gdk.Window object at 0x7f4d0401c4b0 (GdkWindow at 0x29917e0)>: [478]
last window for refs [12505] is gone, \
    destroying the group leader <gtk.gdk.Window object at 0x7f4d0401c4b0 (GdkWindow at 0x29917e0)>
_process_window_resized resizing window <BorderClientWindow object at 0x7f4d04016aa0 \
    (xpra+client+gtk2+border_client_window+BorderClientWindow at 0x1cc9ce0)> \
        (id=407) to (545, 300)
_process_window_resized resizing window <BorderClientWindow object at 0x7f4d04016aa0 \
    (xpra+client+gtk2+border_client_window+BorderClientWindow at 0x1cc9ce0)> \
        (id=407) to (545, 300)
_process_window_resized resizing window <BorderClientWindow object at 0x7f4d04016aa0 \
    (xpra+client+gtk2+border_client_window+BorderClientWindow at 0x1cc9ce0)> \
        (id=407) to (545, 300)
focus-out-event for wid=407
_focus_change((<BorderClientWindow object at 0x7f4d04016aa0 (xpra+client+gtk2+border_client_window+BorderClientWindow at 0x1cc9ce0)>, \
    <GParamBoolean 'has-toplevel-focus'>)) wid=407, has-toplevel-focus=False, _been_mapped=True
update_focus(407, False) _focused=407
send_focus(0)
check_echo_timeout(1374403911109) last_ping_echoed_time=1374403961116
average server latency=85.4, using max wait 1.17s
ping echo server load=(1730, 640, 480), measured client latency=7ms
(Xpra:11814): Gdk-ERROR **: The program 'Xpra' received an X Window System error.
This probably reflects a bug in the program.
The error was 'BadDrawable (invalid Pixmap or Window parameter)'.
  (Details: serial 21081 error_code 9 request_code 152 minor_code 4)

What stands out:


Sun, 21 Jul 2013 14:27:24 GMT - Antoine Martin:

And another trace:

get_client_window_class({'fullscreen': False, 'has-alpha': False, 'xid': '0xa018cf', 'pid': 20014, \
    'window-type': ('COMBO',), 'maximized': False, 'transient-for': 59, 'override-redirect': True\
    }, True) \
    GLClientWindowClass=<class 'xpra.client.gl.gl_client_window.GLClientWindow'>, \
    opengl_enabled=True, mmap_enabled=False, window_types=('COMBO',), encoding=x264
<class 'xpra.client.gtk2.border_client_window.BorderClientWindow'> \
    (<XpraClient object at 0x2e71be0 (xpra+client+gtk2+client+XpraClient at 0x2661cc0)>, \
    <gtk.gdk.Window object at 0x6886550 (GdkWindow at 0x65aeb40)>, \
    105, 132, 158, 280, 270, \
    {'fullscreen': False, 'has-alpha': False, 'xid': '0xa018cf', 'pid': 20014, \
     'window-type': ('COMBO',), 'maximized': False, 'transient-for': 59, 'override-redirect': True\
    }, True, {}, 0)
update_metadata({'fullscreen': False, 'has-alpha': False, 'xid': '0xa018cf', 'pid': 20014, \
    'window-type': ('COMBO',), 'maximized': False, 'transient-for': 59, 'override-redirect': True})
found transient-for: 59 / <GLClientWindow object at 0x7f4d9c2e05f0 \
    (xpra+client+gtk2+client_window+ClientWindow at 0x30cf680)>
set_window_type(['COMBO']) hints=12
set_fullscreen(False)
make_new_backing(<class 'xpra.client.gtk2.pixmap_backing.PixmapBacking'>, 280, 270) \
    effective backing class=<class 'xpra.client.gtk2.pixmap_backing.PixmapBacking'>, alpha=False
make_new_backing(<class 'xpra.client.gtk2.pixmap_backing.PixmapBacking'>, 280, 270) calling init
window_state_updated(<BorderClientWindow object at 0x68865a0 \
    (xpra+client+gtk2+border_client_window+BorderClientWindow at 0x5327a00)>, \
    <gtk.gdk.Event at 0x7f4d9c2d5c38: GDK_WINDOW_STATE>) \
    new_window_state=<flags 0 of type GdkWindowState>, fullscreen=False, maximized=False
(Xpra:19094): Gdk-ERROR **: The program 'Xpra' received an X Window System error.

No resize events, maybe make_new_backing?


Mon, 22 Jul 2013 09:16:28 GMT - callegar:

Hi, this is Sergio, with a new account. Deleted the former one and recreated one, to check track (works with new account, does not work with open id).

Back to the bug.

I'll attach logs asap. In the meantime, just a note to let you know that in my case I do not have an xdummy crash. As mentioned, the xpra xserver is still there, I can even link to it by 'shadow', but things look no good after shadowing.


Mon, 22 Jul 2013 13:02:17 GMT - Antoine Martin: owner changed; cc set

r3960 tries to prevent us from ever using a backing after it has been destroyed (we clear the reference) - which could have happened if we closed the window whilst we were decoding a video frame?

I've been running gtkperf tests all day in various configurations, and I cannot get the client or the server to crash in any way.


Anyway, back to the original bug: I've got an Ubuntu 13.04 VM, and I cannot reproduce the problem with either 0.9.x or 0.10.x: I can connect/disconnect as many times as I like, via ssh or tcp, and no problem at all. Please provide more info or I will have to close this bug as INVALID.


Tue, 23 Jul 2013 08:50:16 GMT - callegar:

Hi, I have finally been able to test again. Sorry for the delay, but I had to run simulations on the test machine and it was connected with nx temporarily.

Good news:

In order to be sure to gather the right logs, I have cleared everything under the .xpra directory.

Then I have started xpra as usual, with the --debug=all and everything was fine. No more hangs. Could it have been a wrong leftover run-xpra in .xpra?

If I see this issue again, I will reopen the bug and maybe try to snapshot some files \before\ making tests.

Sorry for the noise for now. And thanks again for xpra.


Tue, 23 Jul 2013 08:52:15 GMT - Antoine Martin: status changed; resolution set

It wasn't all wasted, I did fix some things along the way.

Thanks.


Wed, 24 Jul 2013 08:26:24 GMT - callegar:

Hi,

I have once more 'succeeded' in hanging the server.

This time it was by detaching from the client using command line as in

xpra detach ssh:server:101

The xpra detach command did never finish and I had to CTRL+C it. At the same time the server stopped working (process still there, process Xorg-for-Xpra still there, but xpra info on server just hanging).

Unfortunately I had not started the server with full log. Last lines in the log are

W: [autospawn] core-util.c: Failed to create lock file '/run/user/callegar/pulse/autospawn.lock': No such file or directory
E: [pulseaudio] main.c: Failed to acquire autospawn lock
2013-07-24 10:17:01,731 New connection received: SocketConnection(/home/callegar/.xpra/mandrago-101)
2013-07-24 10:17:02,027 Handshake complete; enabling connection
2013-07-24 10:17:02,030 Python/Gtk2 Linux client version 0.9.7 connected from 'astragalo'
2013-07-24 10:17:02,030 using x264 as primary encoding
2013-07-24 10:17:02,030 max client resolution is 1680x1050 (from [[1680, 1050]]), current server resolution is 5120x3200
2013-07-24 10:17:02,035 new resolution matching 1680x1050 : screen now set to 1680x1050
2013-07-24 10:17:02,035 setting key repeat rate from client: 660ms delay / 40ms interval
2013-07-24 10:17:02,037 setting keymap: rules=evdev, model=latitude, layout=it,us
2013-07-24 10:17:02,088 setting keymap options: compose:menu
2013-07-24 10:17:02,097 setting full keymap definition from client via xkbcomp
2013-07-24 10:17:02,170 sending updated screen size to clients: 1680x1050 (max 5120x3200)
2013-07-24 10:17:02,181 using sound codec mp3
2013-07-24 10:17:02,817 starting sound using pulseaudio device auto_null.monitor
2013-07-24 10:17:34,496 New connection received: SocketConnection(/home/callegar/.xpra/mandrago-101)
2013-07-24 10:17:34,505 Handshake complete; enabling connection
2013-07-24 10:17:34,505 Disconnecting existing client Protocol(SocketConnection(/home/callegar/.xpra/mandrago-101)), reason is: new valid connection received, this session does not allow sharing
2013-07-24 10:17:34,505 connection closed after 232 packets received (19129 bytes) and 120 packets sent (133785 bytes)
2013-07-24 10:17:55,473 connection closed after 1 packets received (9677 bytes) and 0 packets sent (0 bytes)

Note that the connection is to a server which is physically at the session manager login prompt. Since pulseaudio is started per-session, this may explain why the pulseaudio file cannot be found. Could this matter?


Wed, 24 Jul 2013 08:32:56 GMT - callegar:

Retried with --debug=all on server. All seems regular, but the server hangs on xpra detach ssh:mandrago:101 from client shell. Also the log seems regular. Its last lines are

2013-07-24 10:29:49,136 Focus -> world window
2013-07-24 10:29:49,136 sending WM_TAKE_FOCUS: <gtk.gdk.Window object at 0x3723f50 (GdkWindow at 0x33e0120)>, 940109853L
2013-07-24 10:29:49,229 process non-ui packet damage-sequence
2013-07-24 10:29:49,229 record_latency: took 20.4 ms round trip (19.9 just for echo), 13.0 for decoding of 382636 pixels, 5375 bytes sent over the network in 7.2 ms (6.7 ms for echo)
2013-07-24 10:29:49,229 process non-ui packet damage-sequence
2013-07-24 10:29:49,229 record_latency: took 19.5 ms round trip (19.5 just for echo), 2.0 for decoding of 663 pixels, 226 bytes sent over the network in 16.7 ms (16.7 ms for echo)
2013-07-24 10:29:49,229 process non-ui packet damage-sequence
2013-07-24 10:29:49,230 record_latency: took 19.7 ms round trip (19.7 just for echo), 3.0 for decoding of 579 pixels, 140 bytes sent over the network in 16.7 ms (16.7 ms for echo)
2013-07-24 10:29:49,554 process non-ui packet damage-sequence
2013-07-24 10:29:49,554 record_latency: took 33.6 ms round trip (33.1 just for echo), 18.0 for decoding of 382636 pixels, 14787 bytes sent over the network in 15.3 ms (14.8 ms for echo)
2013-07-24 10:29:49,555 process non-ui packet damage-sequence
2013-07-24 10:29:49,555 record_latency: took 33.3 ms round trip (33.1 just for echo), 2.0 for decoding of 663 pixels, 226 bytes sent over the network in 30.6 ms (30.5 ms for echo)
2013-07-24 10:29:49,555 process non-ui packet damage-sequence
2013-07-24 10:29:49,555 record_latency: took 33.3 ms round trip (33.2 just for echo), 2.0 for decoding of 579 pixels, 140 bytes sent over the network in 30.3 ms (30.2 ms for echo)
2013-07-24 10:29:50,305 will process ui packet focus
2013-07-24 10:29:50,305 _focus(1,()) has_focus=0
2013-07-24 10:29:50,305 Giving focus to client
2013-07-24 10:29:50,305 ... using XSetInputFocus
2013-07-24 10:29:50,306 ... using WM_TAKE_FOCUS
2013-07-24 10:29:50,306 sending WM_TAKE_FOCUS: <gtk.gdk.Window object at 0x347d280 (GdkWindow at 0x34b8120)>, 940111023L
2013-07-24 10:29:50,329 read thread: eof
2013-07-24 10:29:50,329 read thread: empty marker, exiting
2013-07-24 10:29:50,330 connection closed after 32 packets received (13554 bytes) and 20 packets sent (45675 bytes)
2013-07-24 10:29:50,330 write thread: empty marker, exiting
2013-07-24 10:29:50,330 will process ui packet connection-lost
2013-07-24 10:29:50,331 Connection lost
2013-07-24 10:29:50,331 SoundPipeline.stop()

Wed, 24 Jul 2013 08:36:56 GMT - Antoine Martin:

Please try adding --no-speaker to the client's command line.

If that fixes it then we'll know the sound is to blame.


Wed, 24 Jul 2013 08:41:39 GMT - callegar:

I was just making this test, since the hang on SoundPipeline.stop() made me suspicious.

Preventing sound forwarding on server with --no-speaker --no-microphone seems to fix the issue.

Now I wonder: when I made the tests a couple of days ago and everything seemed to work fine, maybe I had the kde session open on the server.


Wed, 24 Jul 2013 16:07:48 GMT - Antoine Martin: status changed; resolution deleted

I am unable to test at the moment, does r3971 fix the problem for you? (trunk)

If so, I will backport to v0.9.x


Mon, 29 Jul 2013 13:15:17 GMT - Antoine Martin:

Backported to v0.9.x in r4001

Keeping this ticket opened because I want to find a better solution for newer versions: one that does not involve having a zombie thread per disconnected client on some platforms..


Wed, 31 Jul 2013 11:58:35 GMT - Antoine Martin: status changed; resolution set

As per ticket:362#comment:4, these threads won't be zombies: the pipeline stop only deadlocks when we call it from a callback.

So this should be fine, if a bit wasteful.


Thu, 01 Aug 2013 09:30:44 GMT - callegar:

Thanks for fixing!


Sat, 23 Jan 2021 04:54:11 GMT - migration script:

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