[libvirt] [PATCH 3/5] Introduce virDomainObjEndAPI

Michal Privoznik mprivozn at redhat.com
Thu Apr 23 17:14:56 UTC 2015


This is basically turning qemuDomObjEndAPI into a more general
function. Other drivers which gets a reference to domain objects may
benefit from this function too.

Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
---
 src/conf/domain_conf.c   | 22 ++++++++++++++++++++++
 src/conf/domain_conf.h   |  2 ++
 src/libvirt_private.syms |  1 +
 src/qemu/qemu_domain.c   |  7 +------
 4 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index aad4ec0..686c614 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -2460,6 +2460,28 @@ void virDomainObjAssignDef(virDomainObjPtr domain,
 }
 
 
+/**
+ * virDomainObjEndAPI:
+ * @vm: domain object
+ *
+ * Finish working with a domain object in an API.  This function
+ * clears whatever was left of a domain that was gathered using
+ * virDomainObjListFindByUUIDRef(). Currently that means only unlocking and
+ * decrementing the reference counter of that domain.  And in order to
+ * make sure the caller does not access the domain, the pointer is
+ * cleared.
+ */
+void
+virDomainObjEndAPI(virDomainObjPtr *vm)
+{
+    if (!*vm)
+        return;
+
+    virObjectUnlock(*vm);
+    virObjectUnref(*vm);
+    *vm = NULL;
+}
+
 
 /*
  *
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 25d3ee6..9955052 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -2397,6 +2397,8 @@ virDomainObjPtr virDomainObjListFindByUUIDRef(virDomainObjListPtr doms,
 virDomainObjPtr virDomainObjListFindByName(virDomainObjListPtr doms,
                                            const char *name);
 
+void virDomainObjEndAPI(virDomainObjPtr *vm);
+
 bool virDomainObjTaint(virDomainObjPtr obj,
                        virDomainTaintFlags taint);
 
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 8c50ea2..e6555f1 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -374,6 +374,7 @@ virDomainNostateReasonTypeFromString;
 virDomainNostateReasonTypeToString;
 virDomainObjAssignDef;
 virDomainObjCopyPersistentDef;
+virDomainObjEndAPI;
 virDomainObjFormat;
 virDomainObjGetMetadata;
 virDomainObjGetPersistentDef;
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 1368386..b588c11 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -2988,12 +2988,7 @@ qemuDomainAgentAvailable(virDomainObjPtr vm,
 void
 qemuDomObjEndAPI(virDomainObjPtr *vm)
 {
-    if (!*vm)
-        return;
-
-    virObjectUnlock(*vm);
-    virObjectUnref(*vm);
-    *vm = NULL;
+    virDomainObjEndAPI(vm);
 }
 
 
-- 
2.0.5




More information about the libvir-list mailing list