diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c index 4277cbe307aa46b4f0b98f8afbcbd9dc59f064e0..63c94e0f5c49b0ce7f9e8dc58fffe22d6d7059b1 100644 --- a/src/libxl/libxl_domain.c +++ b/src/libxl/libxl_domain.c @@ -757,30 +757,6 @@ libxlDomainCleanupJob(libxlDriverPrivatePtr driver, return libxlDomainObjEndJob(driver, vm); } -/* - * Register for domain events emitted by libxl. - */ -int -libxlDomainEventsRegister(libxlDriverPrivatePtr driver, virDomainObjPtr vm) -{ - libxlDomainObjPrivatePtr priv = vm->privateData; - - priv->driver = driver; - - /* Always enable domain death events */ - if (libxl_evenable_domain_death(priv->ctx, vm->def->id, 0, &priv->deathW)) - goto error; - - return 0; - - error: - if (priv->deathW) { - libxl_evdisable_domain_death(priv->ctx, priv->deathW); - priv->deathW = NULL; - } - return -1; -} - /* * Core dump domain to default dump path. * @@ -1081,7 +1057,9 @@ libxlDomainStart(libxlDriverPrivatePtr driver, virDomainObjPtr vm, * be cleaned up if there are any subsequent failures. */ vm->def->id = domid; - if (libxlDomainEventsRegister(driver, vm) < 0) + + /* Always enable domain death events */ + if (libxl_evenable_domain_death(priv->ctx, vm->def->id, 0, &priv->deathW)) goto cleanup_dom; if ((dom_xml = virDomainDefFormat(vm->def, 0)) == NULL) @@ -1121,6 +1099,10 @@ libxlDomainStart(libxlDriverPrivatePtr driver, virDomainObjPtr vm, goto endjob; cleanup_dom: + if (priv->deathW) { + libxl_evdisable_domain_death(priv->ctx, priv->deathW); + priv->deathW = NULL; + } libxl_domain_destroy(priv->ctx, domid, NULL); vm->def->id = -1; virDomainObjSetState(vm, VIR_DOMAIN_SHUTOFF, VIR_DOMAIN_SHUTOFF_FAILED); diff --git a/src/libxl/libxl_domain.h b/src/libxl/libxl_domain.h index 96e238e19823c6cb248b789cb586b4c61ac0bcce..297dffbbf350a25dbaf82d2b33d8f7a0cf96e8ab 100644 --- a/src/libxl/libxl_domain.h +++ b/src/libxl/libxl_domain.h @@ -68,7 +68,6 @@ struct _libxlDomainObjPrivate { /* console */ virChrdevsPtr devs; libxl_evgen_domain_death *deathW; - libxlDriverPrivatePtr driver; unsigned short migrationPort; struct libxlDomainJobObj job; @@ -133,10 +132,6 @@ void libxlDomainEventHandler(void *data, VIR_LIBXL_EVENT_CONST libxl_event *event); -int -libxlDomainEventsRegister(libxlDriverPrivatePtr driver, - virDomainObjPtr vm); - int libxlDomainAutoCoreDump(libxlDriverPrivatePtr driver, virDomainObjPtr vm); diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index 97518601de01022e13976af9769cf420e86c1d89..9814b3f61b8d6e1254e1e1ecdec7bea9cb4dd7c0 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -367,8 +367,9 @@ libxlReconnectDomain(virDomainObjPtr vm, if (virAtomicIntInc(&driver->nactive) == 1 && driver->inhibitCallback) driver->inhibitCallback(true, driver->inhibitOpaque); - /* Re-register domain death et. al. events */ - libxlDomainEventsRegister(driver, vm); + /* Enable domain death events */ + libxl_evenable_domain_death(priv->ctx, vm->def->id, 0, &priv->deathW); + virObjectUnlock(vm); return 0;