]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: mark user defined websocket as used
authorNikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
Tue, 22 Nov 2016 11:09:32 +0000 (14:09 +0300)
committerJohn Ferlan <jferlan@redhat.com>
Fri, 9 Dec 2016 12:54:34 +0000 (07:54 -0500)
We need extra state variable to distinguish between autogenerated
and user defined cases after auto generation is done.

src/conf/domain_conf.h
src/qemu/qemu_process.c

index c9f2bf3d9b88e4bcca257d509d45270f948003d7..114e506610570eaf164a6b868f9c0b482ba953ca 100644 (file)
@@ -1487,6 +1487,7 @@ struct _virDomainGraphicsDef {
             int port;
             bool portReserved;
             int websocket;
+            bool websocketGenerated;
             bool autoport;
             char *keymap;
             virDomainGraphicsAuthDef auth;
index 54fb31ceab8099a0f2f4bbe2676912a8c060b68a..e5b77d63769a06f16dc815c9fa995783a7d65d86 100644 (file)
@@ -3614,6 +3614,7 @@ qemuProcessVNCAllocatePorts(virQEMUDriverPtr driver,
         if (virPortAllocatorAcquire(driver->webSocketPorts, &port) < 0)
             return -1;
         graphics->data.vnc.websocket = port;
+        graphics->data.vnc.websocketGenerated = true;
     }
 
     return 0;
@@ -4105,6 +4106,11 @@ qemuProcessGraphicsReservePorts(virQEMUDriverPtr driver,
                 return -1;
             graphics->data.vnc.portReserved = true;
         }
+        if (graphics->data.vnc.websocket > 0 &&
+            virPortAllocatorSetUsed(driver->remotePorts,
+                                    graphics->data.vnc.websocket,
+                                    true) < 0)
+            return -1;
         break;
 
     case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
@@ -6212,8 +6218,16 @@ void qemuProcessStop(virQEMUDriverPtr driver,
                                         false);
                 graphics->data.vnc.portReserved = false;
             }
-            virPortAllocatorRelease(driver->webSocketPorts,
-                                    graphics->data.vnc.websocket);
+            if (graphics->data.vnc.websocketGenerated) {
+                virPortAllocatorRelease(driver->webSocketPorts,
+                                        graphics->data.vnc.websocket);
+                graphics->data.vnc.websocketGenerated = false;
+                graphics->data.vnc.websocket = -1;
+            } else if (graphics->data.vnc.websocket) {
+                virPortAllocatorSetUsed(driver->remotePorts,
+                                        graphics->data.vnc.websocket,
+                                        false);
+            }
         }
         if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE) {
             if (graphics->data.spice.autoport) {