Xpra: Ticket #2218: server hangs handling resizing

GTK3 seamless server + win32 GTK3 client started with --desktop-scaling=0.3. Maximizing an xterm triggers problems similar to #2214, then the server becomes unresponsive and the client window keeps moving down the screen if you try to resize it!



Mon, 18 Mar 2019 14:47:06 GMT - Antoine Martin: status changed; resolution set

It's a new resize storm:

2019-03-18 21:31:26,886 resize_corral_window() resize from (661, 329) to (637, 290)
2019-03-18 21:31:26,886 updateprop(geometry, (527, 600, 637, 290)) previous value=(527, 600, 661, 329)
2019-03-18 21:31:26,886 XpraServer._window_resized_signaled(WindowModel(0x800022),(<GParamBoxed 'geometry'>,)) geometry=(527, 600, 637, 290), desktop manager geometry=[527, 600, 661, 329]
2019-03-18 21:31:26,886 Property changed on 0x800022: WM_NORMAL_HINTS
2019-03-18 21:31:26,886 WM_NORMAL_HINTS={'size': (661, 329), 'min_size': (25, 17), 'base_size': (19, 4), 'resize_inc': (6, 13), 'win_gravity': 1}
2019-03-18 21:31:26,886 get(decorations, -1) using get_property=-1
2019-03-18 21:31:26,886 updateprop(size-hints, {'size': (661, 329), 'base-size': (19, 4), 'increment': (6, 13), 'gravity': 1, 'minimum-size': (132, 38)}) previous value={'size': (637, 290), 'base-size': (19, 4), 'increment': (6, 13), 'gravity': 1, 'minimum-size': (132, 38)}
2019-03-18 21:31:26,886 updating metadata on WindowModel(0x800022): <GParamBoxed 'size-hints'>
2019-03-18 21:31:26,886 make_metadata(1, WindowModel(0x800022), size-hints)={'size-constraints': {'size': (661, 329), 'base-size': (19, 4), 'increment': (6, 13), 'gravity': 1, 'minimum-size': (132, 38)}}
2019-03-18 21:31:26,887 updated: size-hints={'size': (661, 329), 'base-size': (19, 4), 'increment': (6, 13), 'gravity': 1, 'minimum-size': (132, 38)}
2019-03-18 21:31:26,887 _update_client_geometry: using owner=DesktopManager(1) (setup_done=True)
2019-03-18 21:31:26,887 _do_update_client_geometry: allocated 637x290 (from <function WindowModel._update_client_geometry.<locals>.window_size at 0x7fe6a6934378>)
2019-03-18 21:31:26,887 calc_constrained_size(637, 290, {'size': (661, 329), 'base-size': (19, 4), 'increment': (6, 13), 'gravity': 1, 'minimum-size': (132, 38)})=(637, 290) (size_constraints=(132, 38, 32767, 32767))
2019-03-18 21:31:26,887 _do_update_client_geometry: size({'size': (661, 329), 'base-size': (19, 4), 'increment': (6, 13), 'gravity': 1, 'minimum-size': (132, 38)})=637x290
2019-03-18 21:31:26,887 _do_update_client_geometry: position=527x600 (from <function WindowModel._update_client_geometry.<locals>.window_position at 0x7fe6a6f131e0>)
2019-03-18 21:31:26,887 updateprop(geometry, (527, 600, 637, 290)) unchanged
2019-03-18 21:31:26,888 WindowModel.do_xpra_configure_event(<X11:ConfigureNotify {'type': '22', 'display': '<GdkX11.X11Display object at 0x7fe6ad4dd0d8 (GdkX11Display at 0x563a1fb531d0)>', 'send_event': '0', 'serial': '0x19c35', 'delivered_to': '<GdkX11.X11Window object at 0x7fe6a72617e0 (GdkX11Window at 0x563a200c61b0)>', 'window': '<GdkX11.X11Window object at 0x7fe6a72617e0 (GdkX11Window at 0x563a200c61b0)>', 'x': '527', 'y': '600', 'width': '661', 'height': '329', 'border_width': '0', 'above': '10485761'}>) corral=0x400018, client=0x800022, managed=True
2019-03-18 21:31:26,888 WindowModel.do_xpra_configure_event: event is on the corral window 0x400018, ignored
2019-03-18 21:31:26,888 WindowModel.do_xpra_configure_event(<X11:ConfigureNotify {'type': '22', 'display': '<GdkX11.X11Display object at 0x7fe6ad4dd0d8 (GdkX11Display at 0x563a1fb531d0)>', 'send_event': '0', 'serial': '0x19c43', 'delivered_to': '<GdkX11.X11Window object at 0x7fe6a60e4990 (GdkX11Window at 0x563a1fb9fe20)>', 'window': '<GdkX11.X11Window object at 0x7fe6a60e4990 (GdkX11Window at 0x563a1fb9fe20)>', 'x': '0', 'y': '0', 'width': '661', 'height': '329', 'border_width': '0', 'above': '0'}>) corral=0x400018, client=0x800022, managed=True
2019-03-18 21:31:26,888 calc_constrained_size(661, 329, {'size': (661, 329), 'base-size': (19, 4), 'increment': (6, 13), 'gravity': 1, 'minimum-size': (132, 38)})=(661, 329) (size_constraints=(132, 38, 32767, 32767))
2019-03-18 21:31:26,888 resize_corral_window() resize from (637, 290) to (661, 329)
2019-03-18 21:31:26,888 updateprop(geometry, (527, 600, 661, 329)) previous value=(527, 600, 637, 290)
2019-03-18 21:31:26,888 XpraServer._window_resized_signaled(WindowModel(0x800022),(<GParamBoxed 'geometry'>,)) geometry=(527, 600, 661, 329), desktop manager geometry=[527, 600, 637, 290]
2019-03-18 21:31:26,888 Property changed on 0x800022: WM_NORMAL_HINTS
2019-03-18 21:31:26,888 WM_NORMAL_HINTS={'size': (637, 290), 'min_size': (25, 17), 'base_size': (19, 4), 'resize_inc': (6, 13), 'win_gravity': 1}
2019-03-18 21:31:26,888 get(decorations, -1) using get_property=-1
2019-03-18 21:31:26,889 updateprop(size-hints, {'size': (637, 290), 'base-size': (19, 4), 'increment': (6, 13), 'gravity': 1, 'minimum-size': (132, 38)}) previous value={'size': (661, 329), 'base-size': (19, 4), 'increment': (6, 13), 'gravity': 1, 'minimum-size': (132, 38)}
2019-03-18 21:31:26,889 updating metadata on WindowModel(0x800022): <GParamBoxed 'size-hints'>
2019-03-18 21:31:26,889 make_metadata(1, WindowModel(0x800022), size-hints)={'size-constraints': {'size': (637, 290), 'base-size': (19, 4), 'increment': (6, 13), 'gravity': 1, 'minimum-size': (132, 38)}}
2019-03-18 21:31:26,889 updated: size-hints={'size': (637, 290), 'base-size': (19, 4), 'increment': (6, 13), 'gravity': 1, 'minimum-size': (132, 38)}
2019-03-18 21:31:26,889 _update_client_geometry: using owner=DesktopManager(1) (setup_done=True)
2019-03-18 21:31:26,889 _do_update_client_geometry: allocated 661x329 (from <function WindowModel._update_client_geometry.<locals>.window_size at 0x7fe6a6934378>)
2019-03-18 21:31:26,889 calc_constrained_size(661, 329, {'size': (637, 290), 'base-size': (19, 4), 'increment': (6, 13), 'gravity': 1, 'minimum-size': (132, 38)})=(661, 329) (size_constraints=(132, 38, 32767, 32767))
2019-03-18 21:31:26,889 _do_update_client_geometry: size({'size': (637, 290), 'base-size': (19, 4), 'increment': (6, 13), 'gravity': 1, 'minimum-size': (132, 38)})=661x329
2019-03-18 21:31:26,889 _do_update_client_geometry: position=527x600 (from <function WindowModel._update_client_geometry.<locals>.window_position at 0x7fe6a6f131e0>)
2019-03-18 21:31:26,889 updateprop(geometry, (527, 600, 661, 329)) unchanged
2019-03-18 21:31:26,890 WindowModel.do_xpra_configure_event(<X11:ConfigureNotify {'type': '22', 'display': '<GdkX11.X11Display object at 0x7fe6ad4dd0d8 (GdkX11Display at 0x563a1fb531d0)>', 'send_event': '0', 'serial': '0x19c4c', 'delivered_to': '<GdkX11.X11Window object at 0x7fe6a72617e0 (GdkX11Window at 0x563a200c61b0)>', 'window': '<GdkX11.X11Window object at 0x7fe6a72617e0 (GdkX11Window at 0x563a200c61b0)>', 'x': '527', 'y': '600', 'width': '637', 'height': '290', 'border_width': '0', 'above': '10485761'}>) corral=0x400018, client=0x800022, managed=True
2019-03-18 21:31:26,890 WindowModel.do_xpra_configure_event: event is on the corral window 0x400018, ignored
2019-03-18 21:31:26,890 WindowModel.do_xpra_configure_event(<X11:ConfigureNotify {'type': '22', 'display': '<GdkX11.X11Display object at 0x7fe6ad4dd0d8 (GdkX11Display at 0x563a1fb531d0)>', 'send_event': '0', 'serial': '0x19c5a', 'delivered_to': '<GdkX11.X11Window object at 0x7fe6a60e4990 (GdkX11Window at 0x563a1fb9fe20)>', 'window': '<GdkX11.X11Window object at 0x7fe6a60e4990 (GdkX11Window at 0x563a1fb9fe20)>', 'x': '0', 'y': '0', 'width': '637', 'height': '290', 'border_width': '0', 'above': '0'}>) corral=0x400018, client=0x800022, managed=True
2019-03-18 21:31:26,890 calc_constrained_size(637, 290, {'size': (637, 290), 'base-size': (19, 4), 'increment': (6, 13), 'gravity': 1, 'minimum-size': (132, 38)})=(637, 290) (size_constraints=(132, 38, 32767, 32767))
2019-03-18 21:31:26,890 resize_corral_window() resize from (661, 329) to (637, 290)
2019-03-18 21:31:26,890 updateprop(geometry, (527, 600, 637, 290)) previous value=(527, 600, 661, 329)
2019-03-18 21:31:26,890 XpraServer._window_resized_signaled(WindowModel(0x800022),(<GParamBoxed 'geometry'>,)) geometry=(527, 600, 637, 290), desktop manager geometry=[527, 600, 661, 329]
2019-03-18 21:31:26,891 Property changed on 0x800022: WM_NORMAL_HINTS
2019-03-18 21:31:26,891 WM_NORMAL_HINTS={'size': (661, 329), 'min_size': (25, 17), 'base_size': (19, 4), 'resize_inc': (6, 13), 'win_gravity': 1}
2019-03-18 21:31:26,891 get(decorations, -1) using get_property=-1
2019-03-18 21:31:26,891 updateprop(size-hints, {'size': (661, 329), 'base-size': (19, 4), 'increment': (6, 13), 'gravity': 1, 'minimum-size': (132, 38)}) previous value={'size': (637, 290), 'base-size': (19, 4), 'increment': (6, 13), 'gravity': 1, 'minimum-size': (132, 38)}
2019-03-18 21:31:26,891 updating metadata on WindowModel(0x800022): <GParamBoxed 'size-hints'>
2019-03-18 21:31:26,891 make_metadata(1, WindowModel(0x800022), size-hints)={'size-constraints': {'size': (661, 329), 'base-size': (19, 4), 'increment': (6, 13), 'gravity': 1, 'minimum-size': (132, 38)}}
2019-03-18 21:31:26,891 updated: size-hints={'size': (661, 329), 'base-size': (19, 4), 'increment': (6, 13), 'gravity': 1, 'minimum-size': (132, 38)}
2019-03-18 21:31:26,891 _update_client_geometry: using owner=DesktopManager(1) (setup_done=True)
2019-03-18 21:31:26,891 _do_update_client_geometry: allocated 637x290 (from <function WindowModel._update_client_geometry.<locals>.window_size at 0x7fe6a6934378>)
2019-03-18 21:31:26,891 calc_constrained_size(637, 290, {'size': (661, 329), 'base-size': (19, 4), 'increment': (6, 13), 'gravity': 1, 'minimum-size': (132, 38)})=(637, 290) (size_constraints=(132, 38, 32767, 32767))
2019-03-18 21:31:26,891 _do_update_client_geometry: size({'size': (661, 329), 'base-size': (19, 4), 'increment': (6, 13), 'gravity': 1, 'minimum-size': (132, 38)})=637x290
2019-03-18 21:31:26,891 _do_update_client_geometry: position=527x600 (from <function WindowModel._update_client_geometry.<locals>.window_position at 0x7fe6a6f131e0>)
2019-03-18 21:31:26,892 updateprop(geometry, (527, 600, 637, 290)) unchanged
2019-03-18 21:31:26,892 WindowModel.do_xpra_configure_event(<X11:ConfigureNotify {'type': '22', 'display': '<GdkX11.X11Display object at 0x7fe6ad4dd0d8 (GdkX11Display at 0x563a1fb531d0)>', 'send_event': '0', 'serial': '0x19c63', 'delivered_to': '<GdkX11.X11Window object at 0x7fe6a72617e0 (GdkX11Window at 0x563a200c61b0)>', 'window': '<GdkX11.X11Window object at 0x7fe6a72617e0 (GdkX11Window at 0x563a200c61b0)>', 'x': '527', 'y': '600', 'width': '661', 'height': '329', 'border_width': '0', 'above': '10485761'}>) corral=0x400018, client=0x800022, managed=True
2019-03-18 21:31:26,892 WindowModel.do_xpra_configure_event: event is on the corral window 0x400018, ignored
2019-03-18 21:31:26,892 WindowModel.do_xpra_configure_event(<X11:ConfigureNotify {'type': '22', 'display': '<GdkX11.X11Display object at 0x7fe6ad4dd0d8 (GdkX11Display at 0x563a1fb531d0)>', 'send_event': '0', 'serial': '0x19c71', 'delivered_to': '<GdkX11.X11Window object at 0x7fe6a60e4990 (GdkX11Window at 0x563a1fb9fe20)>', 'window': '<GdkX11.X11Window object at 0x7fe6a60e4990 (GdkX11Window at 0x563a1fb9fe20)>', 'x': '0', 'y': '0', 'width': '661', 'height': '329', 'border_width': '0', 'above': '0'}>) corral=0x400018, client=0x800022, managed=True
2019-03-18 21:31:26,893 calc_constrained_size(661, 329, {'size': (661, 329), 'base-size': (19, 4), 'increment': (6, 13), 'gravity': 1, 'minimum-size': (132, 38)})=(661, 329) (size_constraints=(132, 38, 32767, 32767))
2019-03-18 21:31:26,893 resize_corral_window() resize from (637, 290) to (661, 329)

We can't handle that many changes to the WM_NORMAL_HINTS, so r22113 ignores the unused "size" attribute so we don't end up in a loop by re-sending the size-constraints back to the client for every resize.

The server was unresponsive because of the amount of events it had to process, it would eventually come back after getting through its backlog. As for the client, the problem is gone because we don't end up doing weird things with the geometry - though I suspect there may still be a bug in there.


Sat, 23 Jan 2021 05:45:20 GMT - migration script:

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