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(a)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