Each time a {Dynamic,MultyMon}Scren is created, a new platform_win is created to receive the notifications from X11. This looks very suspicious already. Since I am not a xlib expert, I suppose that each window will receive X11 events.
Whenever XRR ScreenChangeNotify event is received (caused by external process), init_monitors() is called and this will recreate new platform_wins. And sometime, this event happen in a loop and Xorg takes 100% cpu. If only one platform_win is used, the loop doesn't happen for me, but seem to still happen for others. Related bug: https://bugzilla.redhat.com/show_bug.cgi?id=692833 --- client/x11/platform.cpp | 8 +++++++- 1 files changed, 7 insertions(+), 1 deletions(-) diff --git a/client/x11/platform.cpp b/client/x11/platform.cpp index fe98eae..609898a 100644 --- a/client/x11/platform.cpp +++ b/client/x11/platform.cpp @@ -84,7 +84,7 @@ static GLXFBConfig **fb_config = NULL; static XIM x_input_method = NULL; static XIC x_input_context = NULL; -static Window platform_win; +static Window platform_win = 0; static XContext win_proc_context; static ProcessLoop* main_loop = NULL; static int focus_count = 0; @@ -925,6 +925,9 @@ DynamicScreen::DynamicScreen(Display* display, int screen, int& next_mon_id) , _saved_height (get_height()) , _out_of_sync (false) { + if (platform_win != 0) + return; + X_DEBUG_SYNC(display); //FIXME: replace RootWindow() in other refs as well? XLockDisplay(display); @@ -1229,6 +1232,9 @@ MultyMonScreen::MultyMonScreen(Display* display, int screen, int& next_mon_id) throw; } + if (platform_win != 0) + return; + XLockDisplay(display); platform_win = XCreateSimpleWindow(display, RootWindow(display, screen), 0, 0, 1, 1, 0, 0, 0); XUnlockDisplay(display); -- 1.7.6 _______________________________________________ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel