]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: Mark graphics ports used on reconnect
authorMichal Privoznik <mprivozn@redhat.com>
Mon, 18 Sep 2017 13:39:58 +0000 (15:39 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Tue, 19 Sep 2017 13:40:54 +0000 (15:40 +0200)
I don't want to mask the real problem, but one can advocate
that we should be marking graphics ports as already in use on
qemuProcessReconnect anyway, because we already know that they
are taken.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
src/qemu/qemu_process.c

index d3155e4e753fdd04c22822362b493a3f10c84377..053aba1a6cea8e5a6eda47ec204cf0a13db7c56d 100644 (file)
@@ -4035,7 +4035,8 @@ qemuProcessStartHook(virQEMUDriverPtr driver,
 
 static int
 qemuProcessGraphicsReservePorts(virQEMUDriverPtr driver,
-                                virDomainGraphicsDefPtr graphics)
+                                virDomainGraphicsDefPtr graphics,
+                                bool reconnect)
 {
     virDomainGraphicsListenDefPtr glisten;
 
@@ -4050,7 +4051,8 @@ qemuProcessGraphicsReservePorts(virQEMUDriverPtr driver,
 
     switch (graphics->type) {
     case VIR_DOMAIN_GRAPHICS_TYPE_VNC:
-        if (!graphics->data.vnc.autoport) {
+        if (!graphics->data.vnc.autoport ||
+            reconnect) {
             if (virPortAllocatorSetUsed(driver->remotePorts,
                                         graphics->data.vnc.port,
                                         true) < 0)
@@ -4065,7 +4067,7 @@ qemuProcessGraphicsReservePorts(virQEMUDriverPtr driver,
         break;
 
     case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
-        if (graphics->data.spice.autoport)
+        if (graphics->data.spice.autoport && !reconnect)
             return 0;
 
         if (graphics->data.spice.port > 0) {
@@ -4269,7 +4271,7 @@ qemuProcessSetupGraphics(virQEMUDriverPtr driver,
         for (i = 0; i < vm->def->ngraphics; i++) {
             graphics = vm->def->graphics[i];
 
-            if (qemuProcessGraphicsReservePorts(driver, graphics) < 0)
+            if (qemuProcessGraphicsReservePorts(driver, graphics, false) < 0)
                 goto cleanup;
         }
     }
@@ -6881,6 +6883,13 @@ qemuProcessReconnect(void *opaque)
             goto error;
     }
 
+    for (i = 0; i < obj->def->ngraphics; i++) {
+        if (qemuProcessGraphicsReservePorts(driver,
+                                            obj->def->graphics[i],
+                                            true) < 0)
+            goto error;
+    }
+
     if (qemuProcessUpdateState(driver, obj) < 0)
         goto error;