mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/spice
synced 2025-12-26 22:48:19 +00:00
spicec-x11: Fix going into a never ending loop upon xrandr event (#628573) (v2)
When handling an xrandr event the event_listener->on_monitors_change() callback destroys and re-creates the monitor object(s) which results in the DynamicScreen or MultyMonconstructor being called, which triggers more xrandr events. This causes a never ending event handling loop making spicec hang, and eventually making the X-server crash as a backlog of events builds up and it oom's. This patches this by explictly processing the xrandr event caused by the constructor inside the constructor surrounded by the already present guard code against recursive xrandr events.
This commit is contained in:
parent
039700a90f
commit
4efeef3302
@ -778,6 +778,11 @@ DynamicScreen::DynamicScreen(Display* display, int screen, int& next_mon_id)
|
||||
platform_win = XCreateSimpleWindow(display, RootWindow(display, screen), 0, 0, 1, 1, 0, 0, 0);
|
||||
XSelectInput(display, platform_win, StructureNotifyMask);
|
||||
XRRSelectInput(display, platform_win, RRScreenChangeNotifyMask);
|
||||
|
||||
Monitor::self_monitors_change++;
|
||||
process_monitor_configure_events(platform_win);
|
||||
Monitor::self_monitors_change--;
|
||||
|
||||
XPlatform::set_win_proc(platform_win, root_win_proc);
|
||||
intern_clipboard_atoms();
|
||||
X_DEBUG_SYNC(display);
|
||||
@ -1046,6 +1051,11 @@ MultyMonScreen::MultyMonScreen(Display* display, int screen, int& next_mon_id)
|
||||
X_DEBUG_SYNC(get_display());
|
||||
intern_clipboard_atoms();
|
||||
XPlatform::set_win_proc(root_window, root_win_proc);
|
||||
|
||||
XMonitor::inc_change_ref();
|
||||
process_monitor_configure_events(root_window);
|
||||
XMonitor::dec_change_ref();
|
||||
|
||||
X_DEBUG_SYNC(get_display());
|
||||
//
|
||||
//platform_win = XCreateSimpleWindow(display, RootWindow(display, screen), 0, 0, 1, 1, 0, 0, 0);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user