Re: [PATCH 01/11] Introduce qemuDomainObjExitMonitorAlive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 16.12.2014 17:41, Ján Tomko wrote:
The domain might disappear during the time in monitor when
the virDomainObjPtr is unlocked, so the caller needs to check
if it's still alive.

Introduce a helper function for the callers that want to report
an error in this case.
---
  src/qemu/qemu_domain.c | 17 +++++++++++++++++
  src/qemu/qemu_domain.h |  3 +++
  2 files changed, 20 insertions(+)

diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 8dd427a..d074429 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -1606,6 +1606,23 @@ void qemuDomainObjExitMonitor(virQEMUDriverPtr driver,
      qemuDomainObjExitMonitorInternal(driver, obj);
  }

+/* obj must NOT be locked before calling
+ *
+ * Same as qemuDomainObjExitMonitor, but reports an error and
+ * returns -1 if the domain is no longer alive after exiting the monitor

Can you state explicitly that this function needs to be called whenever the domain object or vm->def, or privdata (any runtime info held within vm in general) is used after ExitMonitor()?

+ */
+int qemuDomainObjExitMonitorAlive(virQEMUDriverPtr driver,
+                                  virDomainObjPtr obj)
+{
+    qemuDomainObjExitMonitorInternal(driver, obj);
+    if (!virDomainObjIsActive(obj)) {
+        virReportError(VIR_ERR_OPERATION_FAILED, "%s",
+                       _("domain is no longer running"));
+        return -1;
+    }
+    return 0;
+}
+
  /*
   * obj must be locked before calling
   *
diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
index ce5eba3..b8fec34 100644
--- a/src/qemu/qemu_domain.h
+++ b/src/qemu/qemu_domain.h
@@ -250,6 +250,9 @@ void qemuDomainObjEnterMonitor(virQEMUDriverPtr driver,
  void qemuDomainObjExitMonitor(virQEMUDriverPtr driver,
                                virDomainObjPtr obj)
      ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
+int qemuDomainObjExitMonitorAlive(virQEMUDriverPtr driver,
+                                  virDomainObjPtr obj)
+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
  int qemuDomainObjEnterMonitorAsync(virQEMUDriverPtr driver,
                                     virDomainObjPtr obj,
                                     qemuDomainAsyncJob asyncJob)


ACK

Michal

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list





[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]