]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
conf: virDomainObjListRemoveLocked function
authorMarek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
Thu, 13 Jun 2013 01:54:08 +0000 (03:54 +0200)
committerJim Fehlig <jfehlig@suse.com>
Wed, 3 Jul 2013 20:42:51 +0000 (14:42 -0600)
While iterating with virDomainObjListForEach it is safe to remove
current element. But while iterating, 'doms' lock is already taken, so
can't use standard virDomainObjListRemove. So introduce
virDomainObjListRemoveLocked for this purpose.

Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
src/conf/domain_conf.c
src/conf/domain_conf.h
src/libvirt_private.syms

index bb0faf52d8e5465a92dd03e600ab1bfcd4ab89b2..f80b69074f3a67587099856ae3795a757c2f361a 100644 (file)
@@ -2343,6 +2343,23 @@ void virDomainObjListRemove(virDomainObjListPtr doms,
     virObjectUnlock(doms);
 }
 
+/* The caller must hold lock on 'doms' in addition to 'virDomainObjListRemove'
+ * requirements
+ *
+ * Can be used to remove current element while iterating with
+ * virDomainObjListForEach
+ */
+void virDomainObjListRemoveLocked(virDomainObjListPtr doms,
+                                  virDomainObjPtr dom)
+{
+    char uuidstr[VIR_UUID_STRING_BUFLEN];
+
+    virUUIDFormat(dom->def->uuid, uuidstr);
+    virObjectUnlock(dom);
+
+    virHashRemoveEntry(doms->objs, uuidstr);
+}
+
 static int
 virDomainDeviceCCWAddressIsValid(virDomainDeviceCCWAddressPtr addr)
 {
index 7200062232cf4bb33a9bd9be3c9c10dfe6621659..da83eb60607a19075a6b4951933e5e23845f0aba 100644 (file)
@@ -2260,6 +2260,8 @@ virDomainDefPtr virDomainObjCopyPersistentDef(virDomainObjPtr dom,
 
 void virDomainObjListRemove(virDomainObjListPtr doms,
                             virDomainObjPtr dom);
+void virDomainObjListRemoveLocked(virDomainObjListPtr doms,
+                                  virDomainObjPtr dom);
 
 virDomainDeviceDefPtr virDomainDeviceDefParse(const char *xmlStr,
                                               virDomainDefPtr def,
index 0881af43ad29dc3f2a01a9facb0918621d00c52f..6df55005e921a2b1fae56c1d1fdce22c2743b27a 100644 (file)
@@ -311,6 +311,7 @@ virDomainObjListLoadAllConfigs;
 virDomainObjListNew;
 virDomainObjListNumOfDomains;
 virDomainObjListRemove;
+virDomainObjListRemoveLocked;
 virDomainObjNew;
 virDomainObjSetDefTransient;
 virDomainObjSetState;