]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Fix domain ID allocation
authorJán Tomko <jtomko@redhat.com>
Fri, 31 Jan 2020 14:27:37 +0000 (15:27 +0100)
committerJán Tomko <jtomko@redhat.com>
Fri, 31 Jan 2020 15:11:50 +0000 (16:11 +0100)
The rewrite to use GLib's atomic ops functions changed the behavior
of virAtomicIntInc - before it returned the pre-increment value.

Most of the callers using its value were adjusted, but the one
in qemuDriverAllocateID was not. If libvirtd would reconnect to
a running domain during startup, the next started domain would get
the same ID:

$ virsh list
 Id   Name       State
--------------------------
 1    f28live    running
 1    f28live1   running

Use the g_atomic_add function directly (as recommended in viratomic.h)
and add 1 to the result.

This also restores the usual numbering from 1 instead of 0.

Signed-off-by: Ján Tomko <jtomko@redhat.com>
Fixes: 7b9645a7d127a374b8d1c83fdf9789706dbab2c9
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
src/qemu/qemu_conf.c

index e5051027fc1f0642595725c85f773b2cfdcd1fdd..0b119cbe785bdceefabec52a85785688496b7cac 100644 (file)
@@ -1858,7 +1858,7 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
 
 int qemuDriverAllocateID(virQEMUDriverPtr driver)
 {
-    return virAtomicIntInc(&driver->lastvmid);
+    return g_atomic_int_add(&driver->lastvmid, 1) + 1;
 }