Xpra: Ticket #2534: xpra crash using LibreOffice

On some LibreOffice operation (replace non-empty cell with confirmation), the newest r24803 version crashes xpra a few times.

"Xpra-Python3-x86_64_4.0-r24803\xpra_cmd" attach ssh://user@ip/20 -d gtk
[...]
2019-12-28 18:38:33,814 get_window_frame_sizes()={'normal': (8, 8), 'fixed': (3, 3), 'minimum': (136, 39), 'menu-bar': 20, 'border': 1, 'caption': 23, 'offset': (8, 31), 'frame': (8, 8, 31, 8)}
2019-12-28 18:38:33,820 get_window_frame_sizes()={'normal': (8, 8), 'fixed': (3, 3), 'minimum': (136, 39), 'menu-bar': 20, 'border': 1, 'caption': 23, 'offset': (8, 31), 'frame': (8, 8, 31, 8)}
2019-12-28 18:38:33,900 set_windows_cursor(dict_values([ClientWindow(1), GLClientWindow(5 : GLDrawingArea(5, (1600, 837), GBRP)), ClientWindow(9), GLClientWindow(16 : GLDrawingArea(16, (637, 148), None))]), args[13])
2019-12-28 18:38:33,905 make_cursor: has-name=True, has-cursor-types=True, xscale=1, yscale=1, USE_LOCAL_CURSORS=False
2019-12-28 18:38:33,908 server cursor sizes: default=53, max=128
2019-12-28 18:38:33,911 new raw cursor at 15,9 with serial=0x8, dimensions: 16x16, len(pixels)=1024
2019-12-28 18:38:33,914 default cursor size is 32, maximum=(32, 32)
2019-12-28 18:38:33,920 pasting 16x16 cursor to fixed OS size 32x32
2019-12-28 18:38:33,932 make_cursor(..)=<__gi__.GdkWin32Cursor object at 0x000000000a35c0c0 (GdkWin32Cursor at 0x0000000007a14dc0)>
2019-12-28 18:38:34,005 get_window_frame_size(473, 336, 637, 148)=None
2019-12-28 18:38:34,011 get_window_frame_sizes()={'normal': (8, 8), 'fixed': (3, 3), 'minimum': (136, 39), 'menu-bar': 20, 'border': 1, 'caption': 23, 'offset': (8, 31), 'frame': (8, 8, 31, 8)}
2019-12-28 18:38:35,785 set_windows_cursor(dict_values([ClientWindow(1), GLClientWindow(5 : GLDrawingArea(5, (1600, 837), GBRP)), ClientWindow(9)]), args[13])
2019-12-28 18:38:35,789 make_cursor: has-name=True, has-cursor-types=True, xscale=1, yscale=1, USE_LOCAL_CURSORS=False
2019-12-28 18:38:35,791 server cursor sizes: default=53, max=128
2019-12-28 18:38:35,792 new raw cursor at 1,1 with serial=0x7, dimensions: 10x16, len(pixels)=640
2019-12-28 18:38:35,793 default cursor size is 32, maximum=(32, 32)
2019-12-28 18:38:35,793 pasting 10x16 cursor to fixed OS size 32x32
2019-12-28 18:38:35,797 make_cursor(..)=<__gi__.GdkWin32Cursor object at 0x000000000a365380 (GdkWin32Cursor at 0x0000000007a148c0)>
Exception code=0xc0000005 flags=0x0 at 0x00007FFEA906333D. Access violation - attempting to read data at address 0x000000002A958000
2019-12-28 18:38:49,480 Warning: long timer waiting time,
2019-12-28 18:38:49,493  UI thread polling waited 10.3 seconds longer than intended (10.8 vs 0.5)

However, without opengl, it just delays and resumes:

"Xpra-Python3-x86_64_4.0-r24803\xpra_cmd" attach ssh://user@ip/20 -d gtk --opengl=no
2019-12-28 18:39:43,547 Xpra GTK3 client version 4.0-r24803 64-bit
2019-12-28 18:39:43,549  running on Microsoft Windows 10
2019-12-28 18:39:43,557 get_screen_scaling() screen=<__gi__.GdkWin32Screen object at 0x0000000005472600 (GdkWin32Screen at 0x000000000395fa20)>
2019-12-28 18:39:43,558 1 monitors
2019-12-28 18:39:43,558 get_monitor_scale_factor(0)=1
2019-12-28 18:39:43,560 border color derived from None: #d41d8c
2019-12-28 18:39:43,561 parse_border(auto,5:off)=WindowBorder(False, 0xD41D8C, 0.6, 5)
2019-12-28 18:39:43,613 Warning: failed to import opencv:
2019-12-28 18:39:43,614  No module named 'cv2'
2019-12-28 18:39:43,614  webcam forwarding is disabled
2019-12-28 18:39:44,271 GStreamer version 1.16.2 for Python 3.8.0 64-bit
2019-12-28 18:39:44,546 init_opengl(no)
2019-12-28 18:39:44,547 init_opengl: enable_option=no
2019-12-28 18:39:44,553 run() HAS_X11_BINDINGS=False
2019-12-28 18:39:44,555 GTKXpraClient.gtk_main() calling <function main at 0x0000000004d9d280>
[...]
2019-12-28 18:40:59,221 make_cursor: has-name=True, has-cursor-types=True, xscale=1, yscale=1, USE_LOCAL_CURSORS=False
2019-12-28 18:40:59,223 server cursor sizes: default=53, max=128
2019-12-28 18:40:59,225 new raw cursor at 11,11 with serial=0x2, dimensions: 24x24, len(pixels)=2304
2019-12-28 18:40:59,226 default cursor size is 32, maximum=(32, 32)
2019-12-28 18:40:59,228 pasting 24x24 cursor to fixed OS size 32x32
2019-12-28 18:40:59,234 make_cursor(..)=<__gi__.GdkWin32Cursor object at 0x000000001b65c4c0 (GdkWin32Cursor at 0x00000000084e9680)>
2019-12-28 18:41:01,320 set_windows_cursor(dict_values([ClientWindow(1), ClientWindow(5), ClientWindow(9)]), args[13])
2019-12-28 18:41:01,325 make_cursor: has-name=True, has-cursor-types=True, xscale=1, yscale=1, USE_LOCAL_CURSORS=False
2019-12-28 18:41:01,328 server cursor sizes: default=53, max=128
2019-12-28 18:41:01,331 new raw cursor at 1,1 with serial=0x4, dimensions: 1x1, len(pixels)=4
2019-12-28 18:41:01,336 default cursor size is 32, maximum=(32, 32)
2019-12-28 18:41:01,340 pasting 1x1 cursor to fixed OS size 32x32
2019-12-28 18:41:01,351 make_cursor(..)=<__gi__.GdkWin32Cursor object at 0x000000001b65cf40 (GdkWin32Cursor at 0x00000000084f1580)>
2019-12-28 18:41:35,373 server is not responding, drawing spinners over the windows
2019-12-28 18:41:35,648 server is OK again
2019-12-28 18:42:01,776 set_windows_cursor(dict_values([ClientWindow(1), ClientWindow(5), ClientWindow(9)]), args[13])
2019-12-28 18:42:01,782 make_cursor: has-name=True, has-cursor-types=True, xscale=1, yscale=1, USE_LOCAL_CURSORS=False
2019-12-28 18:42:01,787 server cursor sizes: default=53, max=128
2019-12-28 18:42:01,790 new raw cursor at 11,11 with serial=0x2, dimensions: 24x24, len(pixels)=2304
2019-12-28 18:42:01,795 default cursor size is 32, maximum=(32, 32)
2019-12-28 18:42:01,798 pasting 24x24 cursor to fixed OS size 32x32
2019-12-28 18:42:01,812 make_cursor(..)=<__gi__.GdkWin32Cursor object at 0x000000001b40e840 (GdkWin32Cursor at 0x00000000084bc100)>
2019-12-28 18:42:01,826 set_windows_cursor(dict_values([ClientWindow(1), ClientWindow(5), ClientWindow(9)]), args[0])
2019-12-28 18:42:01,889 set_windows_cursor(dict_values([ClientWindow(1), ClientWindow(5), ClientWindow(9)]), args[13])
2019-12-28 18:42:01,894 make_cursor: has-name=True, has-cursor-types=True, xscale=1, yscale=1, USE_LOCAL_CURSORS=False
2019-12-28 18:42:01,897 server cursor sizes: default=53, max=128
2019-12-28 18:42:01,900 new raw cursor at 11,11 with serial=0x2, dimensions: 24x24, len(pixels)=2304
2019-12-28 18:42:01,906 default cursor size is 32, maximum=(32, 32)
2019-12-28 18:42:01,907 pasting 24x24 cursor to fixed OS size 32x32
2019-12-28 18:42:01,920 make_cursor(..)=<__gi__.GdkWin32Cursor object at 0x000000001b40e2c0 (GdkWin32Cursor at 0x00000000084e9880)>
2019-12-28 18:42:03,338 set_windows_cursor(dict_values([ClientWindow(1), ClientWindow(5), ClientWindow(9)]), args[13])
2019-12-28 18:42:03,345 make_cursor: has-name=True, has-cursor-types=True, xscale=1, yscale=1, USE_LOCAL_CURSORS=False
2019-12-28 18:42:03,349 server cursor sizes: default=53, max=128
2019-12-28 18:42:03,352 new raw cursor at 1,1 with serial=0x4, dimensions: 1x1, len(pixels)=4
2019-12-28 18:42:03,357 default cursor size is 32, maximum=(32, 32)
2019-12-28 18:42:03,360 pasting 1x1 cursor to fixed OS size 32x32
2019-12-28 18:42:03,370 make_cursor(..)=<__gi__.GdkWin32Cursor object at 0x000000001b40e540 (GdkWin32Cursor at 0x00000000084f1600)>
2019-12-28 18:43:24,033 set_windows_cursor(dict_values([ClientWindow(1), ClientWindow(5), ClientWindow(9)]), args[13])
2019-12-28 18:43:24,038 make_cursor: has-name=True, has-cursor-types=True, xscale=1, yscale=1, USE_LOCAL_CURSORS=False
2019-12-28 18:43:24,042 server cursor sizes: default=53, max=128
2019-12-28 18:43:24,045 new raw cursor at 11,11 with serial=0x2, dimensions: 24x24, len(pixels)=2304
2019-12-28 18:43:24,051 default cursor size is 32, maximum=(32, 32)
2019-12-28 18:43:24,055 pasting 24x24 cursor to fixed OS size 32x32
2019-12-28 18:43:24,068 make_cursor(..)=<__gi__.GdkWin32Cursor object at 0x000000001b406d80 (GdkWin32Cursor at 0x00000000084f1e00)>
2019-12-28 18:43:25,233 set_windows_cursor(dict_values([ClientWindow(1), ClientWindow(5), ClientWindow(9)]), args[13])
2019-12-28 18:43:25,238 make_cursor: has-name=True, has-cursor-types=True, xscale=1, yscale=1, USE_LOCAL_CURSORS=False
2019-12-28 18:43:25,244 server cursor sizes: default=53, max=128
2019-12-28 18:43:25,249 new raw cursor at 1,1 with serial=0x7, dimensions: 10x16, len(pixels)=640
2019-12-28 18:43:25,253 default cursor size is 32, maximum=(32, 32)
2019-12-28 18:43:25,255 pasting 10x16 cursor to fixed OS size 32x32
2019-12-28 18:43:25,271 make_cursor(..)=<__gi__.GdkWin32Cursor object at 0x000000001b4293c0 (GdkWin32Cursor at 0x00000000084f1700)>
2019-12-28 18:43:25,721 get_client_window_class(313, 29, {b'window-type': (b'TOOLTIP',), b'client-machine': b'sntentos-precision-t3620', b'title': b'LibreOffice 6.3', b'pid': 32420, b'override-redirect': True, b'transient-for': 5, b'xid': b'0xc07038', b'class-instance': (b'soffice', b'Soffice'), b'group-leader-xid': 12582913}, True) ClientWindowClass=<class 'xpra.client.gtk3.client_window.ClientWindow'>, GLClientWindowClass=None, opengl_enabled=False, mmap_enabled=False, encoding=auto
2019-12-28 18:43:25,725 get_group_leader: transient_for=5
2019-12-28 18:43:25,727 get_window_frame_sizes()={'normal': (8, 8), 'fixed': (3, 3), 'minimum': (136, 39), 'menu-bar': 20, 'border': 1, 'caption': 23, 'offset': (8, 31), 'frame': (8, 8, 31, 8)}
2019-12-28 18:43:25,728 get_window_frame_sizes()={'normal': (8, 8), 'fixed': (3, 3), 'minimum': (136, 39), 'menu-bar': 20, 'border': 1, 'caption': 23, 'offset': (8, 31), 'frame': (8, 8, 31, 8)}
2019-12-28 18:43:25,779 set_windows_cursor(dict_values([ClientWindow(1), ClientWindow(5), ClientWindow(9)]), args[0])
2019-12-28 18:44:37,541 set_windows_cursor(dict_values([ClientWindow(1), ClientWindow(5), ClientWindow(9)]), args[13])
2019-12-28 18:44:37,547 make_cursor: has-name=True, has-cursor-types=True, xscale=1, yscale=1, USE_LOCAL_CURSORS=False
2019-12-28 18:44:37,551 server cursor sizes: default=53, max=128
2019-12-28 18:44:37,553 new raw cursor at 11,11 with serial=0x2, dimensions: 24x24, len(pixels)=2304
2019-12-28 18:44:37,556 default cursor size is 32, maximum=(32, 32)
2019-12-28 18:44:37,558 pasting 24x24 cursor to fixed OS size 32x32
2019-12-28 18:44:37,566 make_cursor(..)=<__gi__.GdkWin32Cursor object at 0x000000001b4295c0 (GdkWin32Cursor at 0x00000000084f17c0)>

Attached xpra server logfile



Sat, 28 Dec 2019 18:03:34 GMT - stdedos: attachment set


Sun, 29 Dec 2019 11:38:13 GMT - Antoine Martin: owner, description changed

On some LibreOffice? operation (replace non-empty cell with confirmation)

How do I do that? I assume that the server is your usual Ubuntu 16.04 with a default install of libreoffice?


Sun, 29 Dec 2019 12:05:52 GMT - stdedos:

Replying to Antoine Martin:

On some LibreOffice? operation (replace non-empty cell with confirmation)

How do I do that? I assume that the server is your usual Ubuntu 16.04 with a default install of libreoffice?

Almost. Libreoffice is installed as snap (and called by /snap/bin/libreoffice.calc, since it doesn't seem to install icons).


Sun, 29 Dec 2019 15:08:29 GMT - Antoine Martin: owner, priority, status changed


Thu, 05 Mar 2020 10:48:27 GMT - Antoine Martin: owner, status changed

Is this still a problem?

Could this be the same bug that was fixed in #2579? (if so, the latest client builds should be immune to this)


Thu, 05 Mar 2020 20:18:56 GMT - stdedos: status changed; resolution set

Xpra-Python3-x86_64_4.0-r25519 seems to be clean of it.

I've tried it around 10 times, I am guessing that it would've replicated already.


Sat, 23 Jan 2021 05:53:52 GMT - migration script:

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