On Sun, Dec 09, 2018 at 13:01:27 -0500, Demi M. Obenour wrote:
This can happen via `xl destroy`, for example. When this happens,
libvirt is stuck in an inconsistent state: libvirt believes the domain
is still running, but attempts to use libvirt’s APIs to shutdown the
domain fail. The only way out of this situation is to restart libvirt.
To prevent this from happening, process LIBXL_EVENT_TYPE_DOMAIN_DEATH as
well as LIBXL_EVENT_TYPE_DOMAIN_SHUTDOWN, but only if libvirt has not
already begun to destroy the domain.
Signed-off-by: Demi Obenour <demiobenour(a)gmail.com>
---
src/conf/domain_conf.h | 4 ++++
src/libxl/libxl_domain.c | 24 +++++++++++++++++++-----
2 files changed, 23 insertions(+), 5 deletions(-)
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index b24e6ec3de..d3520bde15 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -2620,6 +2620,10 @@ struct _virDomainObj {
unsigned int updated : 1;
unsigned int removing : 1;
+ /* Only used by the Xen backend */
+ unsigned int being_destroyed_by_libvirt : 1;
+ unsigned int already_destroyed : 1;
Please put this into 'struct _libxlDomainObjPrivate' if it's going to be
only used by the libxl driver.
Also the 'bool' type should be used.
+
virDomainDefPtr def; /* The current definition */
virDomainDefPtr newDef; /* New definition to activate at shutdown */