]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
Use atomic ops to increment nextvmid
authorDaniel P. Berrange <berrange@redhat.com>
Mon, 14 Jan 2013 16:50:08 +0000 (16:50 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Tue, 5 Feb 2013 19:22:25 +0000 (19:22 +0000)
Use atomic ops to increment nextvmid and encapsulate it in a
method to prevent accidental non-atomic access

src/qemu/qemu_conf.c
src/qemu/qemu_conf.h
src/qemu/qemu_process.c

index badbdde6788ea95f73a2151b1bb05e733925a5f3..17f7d45bfd4e60640f07c0aeeb545f16109b89b9 100644 (file)
@@ -52,6 +52,7 @@
 #include "domain_nwfilter.h"
 #include "virfile.h"
 #include "virstring.h"
+#include "viratomic.h"
 #include "configmake.h"
 
 #define VIR_FROM_THIS VIR_FROM_QEMU
@@ -782,3 +783,8 @@ qemuRemoveSharedDisk(virHashTablePtr sharedDisks,
     VIR_FREE(key);
     return 0;
 }
+
+int qemuDriverAllocateID(virQEMUDriverPtr driver)
+{
+    return virAtomicIntInc(&driver->nextvmid);
+}
index a96ff76f4890703bf70732bdec7bed8b104702ce..1cc277f69831ec73d78d5cfdfceec6f31a78f549 100644 (file)
@@ -260,4 +260,6 @@ int qemuRemoveSharedDisk(virHashTablePtr sharedDisks,
 char * qemuGetSharedDiskKey(const char *disk_path)
     ATTRIBUTE_NONNULL(1);
 
+int qemuDriverAllocateID(virQEMUDriverPtr driver);
+
 #endif /* __QEMUD_CONF_H */
index 9c777ce1401477a86d8622e8f74f6d03deeccf20..30f923ab920b94e588fb37aea37a1b672e8341f9 100644 (file)
@@ -3586,7 +3586,7 @@ int qemuProcessStart(virConnectPtr conn,
     if (virDomainObjSetDefTransient(driver->caps, vm, true) < 0)
         goto cleanup;
 
-    vm->def->id = driver->nextvmid++;
+    vm->def->id = qemuDriverAllocateID(driver);
     qemuDomainSetFakeReboot(driver, vm, false);
     virDomainObjSetState(vm, VIR_DOMAIN_SHUTOFF, VIR_DOMAIN_SHUTOFF_UNKNOWN);
 
@@ -4438,7 +4438,7 @@ int qemuProcessAttach(virConnectPtr conn ATTRIBUTE_UNUSED,
     if (virDomainObjSetDefTransient(driver->caps, vm, true) < 0)
         goto cleanup;
 
-    vm->def->id = driver->nextvmid++;
+    vm->def->id = qemuDriverAllocateID(driver);
 
     if (!driver->nactive && driver->inhibitCallback)
         driver->inhibitCallback(true, driver->inhibitOpaque);