[Spice-devel] [PATCH 0/2] RFC: handle startup race for monitors config

Jonathon Jongsma jjongsma at redhat.com
Thu Apr 2 09:15:51 PDT 2015


On Thu, 2015-04-02 at 16:42 +0200, Marc-André Lureau wrote:
> 
> On Thu, Apr 2, 2015 at 4:36 PM, Jonathon Jongsma <jjongsma at redhat.com>
> wrote:
>         That would be a pretty drastic change in behavior. So, no, I
>         have not
>         considered that. It would also open up a large can of worms.
>         For
>         example, what would happen if you re-configured the displays
>         from within
>         the guest control panel. What would you do then?
>         
> 
> 
> I would eventually follow guest configuration, but I wouldn't send
> back a new configuration (no auto-resize).
> 


So, I did a quick test where I used an un-modified spice-server and the
following diff to virt-viewer:

===================

diff --git a/src/virt-viewer-session.c b/src/virt-viewer-session.c
index 131a500..5f47d09 100644
--- a/src/virt-viewer-session.c
+++ b/src/virt-viewer-session.c
@@ -412,6 +412,13 @@ virt_viewer_session_on_monitor_geometry_changed(VirtViewerSession* self,
     if (!klass->apply_monitor_geometry)
         return;
 
+    /* don't send monitor resize if we're in auto-conf fullscreen mode...*/
+    if (virt_viewer_app_get_fullscreen(self->priv->app)) {
+        g_debug("%s: not sending new monitors config because app is in fullscreen mode", G_STRFUNC);
+        return;
+    }
+    g_debug("%s: sending", G_STRFUNC);
+
     /* find highest monitor ID so we can create the sparse array */
     for (l = self->priv->displays; l; l = l->next) {
         VirtViewerDisplay *d = VIRT_VIEWER_DISPLAY(l->data);

====================


This is basically what you suggest. While we're in auto-conf mode, it never
sends down monitor config changes, but it does respond to display updates from
the server. When the user exits fullscreen mode, it resumes auto-resize and
sends new monitor config messages to the server. It improved the situation, but
didn't fix it. Before applying this patch, when I started virt-viewer in
--full-screen mode, the extra display was left enabled about 25-50% of the
time. After this patch, it happens only about 10% of the time.

But it also seems to introduce a regression that I haven't investigated yet:
when things work properly (e.g. only a single fullscreen display is shown) and
I follow these steps:
 - exit fullscreen
 - enable a second display (View > Displays > Display 2)

The second window appears, but it simply displays "Waiting for display 2..."
forever. The display only shows starts working after you resize one of the
windows.




More information about the Spice-devel mailing list