Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-15-SP3:Update
libvirt.22881
23b51d7b-libxl-disable-death-event.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 23b51d7b-libxl-disable-death-event.patch of Package libvirt.22881
commit 23b51d7b8ec885e97a9277cf0a6c2833db4636e8 Author: Jim Fehlig <jfehlig@suse.com> Date: Fri Oct 29 14:16:33 2021 -0600 libxl: Disable death events after receiving a shutdown event The libxl driver will handle all domain destruction and cleanup when receiving a domain shutdown event from libxl. Commit fa30ee04a2a introduced the ignoreDeathEvent boolean in the DomainObjPrivate struct to ignore subsequent death events from libxl. But libxl already provides a mechanism to disable death events via libxl_evdisable_domain_death. This patch partially reverts commit fa30ee04a2a and instead uses libxl_evdisable_domain_death to disable subsequent death events when processing a shutdown event. Signed-off-by: Jim Fehlig <jfehlig@suse.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> Index: libvirt-7.1.0/src/libxl/libxl_domain.c =================================================================== --- libvirt-7.1.0.orig/src/libxl/libxl_domain.c +++ libvirt-7.1.0/src/libxl/libxl_domain.c @@ -614,12 +614,6 @@ static void libxlDomainHandleDeath(libxlDriverPrivatePtr driver, virDomainObjPtr vm) { virObjectEventPtr dom_event = NULL; - libxlDomainObjPrivatePtr priv = vm->privateData; - - if (priv->ignoreDeathEvent) { - priv->ignoreDeathEvent = false; - return; - } if (libxlDomainObjBeginJob(driver, vm, LIBXL_JOB_MODIFY) < 0) return; @@ -669,7 +663,6 @@ libxlDomainEventHandler(void *data, VIR_ } if (event->type == LIBXL_EVENT_TYPE_DOMAIN_SHUTDOWN) { - libxlDomainObjPrivatePtr priv = vm->privateData; struct libxlShutdownThreadInfo *shutdown_info = NULL; virThread thread; g_autofree char *name = NULL; @@ -686,12 +679,9 @@ libxlDomainEventHandler(void *data, VIR_ name = g_strdup_printf("ev-%d", event->domid); /* * Cleanup will be handled by the shutdown thread. - * Ignore the forthcoming death event from libxl */ - priv->ignoreDeathEvent = true; if (virThreadCreateFull(&thread, false, libxlDomainShutdownThread, name, false, shutdown_info) < 0) { - priv->ignoreDeathEvent = false; /* * Not much we can do on error here except log it. */ @@ -812,18 +802,17 @@ libxlDomainDestroyInternal(libxlDriverPr libxlDomainObjPrivatePtr priv = vm->privateData; int ret = -1; - /* Ignore next LIBXL_EVENT_TYPE_DOMAIN_DEATH as the caller will handle - * domain death appropriately already (having more info, like the reason). - */ - priv->ignoreDeathEvent = true; + if (priv->deathW) { + libxl_evdisable_domain_death(cfg->ctx, priv->deathW); + priv->deathW = NULL; + } + /* Unlock virDomainObj during destroy, which can take considerable * time on large memory domains. */ virObjectUnlock(vm); ret = libxl_domain_destroy(cfg->ctx, vm->def->id, NULL); virObjectLock(vm); - if (ret) - priv->ignoreDeathEvent = false; return ret; } @@ -883,8 +872,6 @@ libxlDomainCleanup(libxlDriverPrivatePtr priv->deathW = NULL; } - priv->ignoreDeathEvent = false; - if (!!g_atomic_int_dec_and_test(&driver->nactive) && driver->inhibitCallback) driver->inhibitCallback(false, driver->inhibitOpaque); Index: libvirt-7.1.0/src/libxl/libxl_domain.h =================================================================== --- libvirt-7.1.0.orig/src/libxl/libxl_domain.h +++ libvirt-7.1.0/src/libxl/libxl_domain.h @@ -62,9 +62,6 @@ struct _libxlDomainObjPrivate { /* console */ virChrdevsPtr devs; libxl_evgen_domain_death *deathW; - /* Flag to indicate the upcoming LIBXL_EVENT_TYPE_DOMAIN_DEATH is caused - * by libvirt and should not be handled separately */ - bool ignoreDeathEvent; virThreadPtr migrationDstReceiveThr; unsigned short migrationPort; char *lockState;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor