EnterMonitor and ExitMonitor methods are very similar to their
*WithDriver variants; consolidate them into EnterMonitorInternal and
ExitMonitorInternal to avoid (mainly future) code duplication.
---
src/qemu/qemu_domain.c | 74 ++++++++++++++++++++++-------------------------
1 files changed, 35 insertions(+), 39 deletions(-)
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 8f3eaa7..a2e77b6 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -622,16 +622,10 @@ int qemuDomainObjEndJob(virDomainObjPtr obj)
return virDomainObjUnref(obj);
}
-/*
- * obj must be locked before calling, qemud_driver must be unlocked
- *
- * To be called immediately before any QEMU monitor API call
- * Must have already called qemuDomainObjBeginJob(), and checked
- * that the VM is still active.
- *
- * To be followed with qemuDomainObjExitMonitor() once complete
- */
-void qemuDomainObjEnterMonitor(virDomainObjPtr obj)
+
+static void
+qemuDomainObjEnterMonitorInternal(struct qemud_driver *driver,
+ virDomainObjPtr obj)
{
qemuDomainObjPrivatePtr priv = obj->privateData;
@@ -639,14 +633,13 @@ void qemuDomainObjEnterMonitor(virDomainObjPtr obj)
qemuMonitorRef(priv->mon);
ignore_value(virTimeMs(&priv->monStart));
virDomainObjUnlock(obj);
+ if (driver)
+ qemuDriverUnlock(driver);
}
-
-/* obj must NOT be locked before calling, qemud_driver must be unlocked
- *
- * Should be paired with an earlier qemuDomainObjEnterMonitor() call
- */
-void qemuDomainObjExitMonitor(virDomainObjPtr obj)
+static void
+qemuDomainObjExitMonitorInternal(struct qemud_driver *driver,
+ virDomainObjPtr obj)
{
qemuDomainObjPrivatePtr priv = obj->privateData;
int refs;
@@ -656,6 +649,8 @@ void qemuDomainObjExitMonitor(virDomainObjPtr obj)
if (refs > 0)
qemuMonitorUnlock(priv->mon);
+ if (driver)
+ qemuDriverLock(driver);
virDomainObjLock(obj);
priv->monStart = 0;
@@ -664,6 +659,28 @@ void qemuDomainObjExitMonitor(virDomainObjPtr obj)
}
}
+/*
+ * obj must be locked before calling, qemud_driver must be unlocked
+ *
+ * To be called immediately before any QEMU monitor API call
+ * Must have already called qemuDomainObjBeginJob(), and checked
+ * that the VM is still active.
+ *
+ * To be followed with qemuDomainObjExitMonitor() once complete
+ */
+void qemuDomainObjEnterMonitor(virDomainObjPtr obj)
+{
+ qemuDomainObjEnterMonitorInternal(NULL, obj);
+}
+
+/* obj must NOT be locked before calling, qemud_driver must be unlocked
+ *
+ * Should be paired with an earlier qemuDomainObjEnterMonitor() call
+ */
+void qemuDomainObjExitMonitor(virDomainObjPtr obj)
+{
+ qemuDomainObjExitMonitorInternal(NULL, obj);
+}
/*
* obj must be locked before calling, qemud_driver must be locked
@@ -676,16 +693,9 @@ void qemuDomainObjExitMonitor(virDomainObjPtr obj)
void qemuDomainObjEnterMonitorWithDriver(struct qemud_driver *driver,
virDomainObjPtr obj)
{
- qemuDomainObjPrivatePtr priv = obj->privateData;
-
- qemuMonitorLock(priv->mon);
- qemuMonitorRef(priv->mon);
- ignore_value(virTimeMs(&priv->monStart));
- virDomainObjUnlock(obj);
- qemuDriverUnlock(driver);
+ qemuDomainObjEnterMonitorInternal(driver, obj);
}
-
/* obj must NOT be locked before calling, qemud_driver must be unlocked,
* and will be locked after returning
*
@@ -694,21 +704,7 @@ void qemuDomainObjEnterMonitorWithDriver(struct qemud_driver
*driver,
void qemuDomainObjExitMonitorWithDriver(struct qemud_driver *driver,
virDomainObjPtr obj)
{
- qemuDomainObjPrivatePtr priv = obj->privateData;
- int refs;
-
- refs = qemuMonitorUnref(priv->mon);
-
- if (refs > 0)
- qemuMonitorUnlock(priv->mon);
-
- qemuDriverLock(driver);
- virDomainObjLock(obj);
-
- priv->monStart = 0;
- if (refs == 0) {
- priv->mon = NULL;
- }
+ qemuDomainObjExitMonitorInternal(driver, obj);
}
void qemuDomainObjEnterRemoteWithDriver(struct qemud_driver *driver,
--
1.7.6