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.
*
* 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)
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);
/* console */
virChrdevsPtr devs;
libxl_evgen_domain_death *deathW;
- libxlDriverPrivatePtr driver;
unsigned short migrationPort;
struct libxlDomainJobObj job;
libxlDomainEventHandler(void *data,
VIR_LIBXL_EVENT_CONST libxl_event *event);
-int
-libxlDomainEventsRegister(libxlDriverPrivatePtr driver,
- virDomainObjPtr vm);
-
int
libxlDomainAutoCoreDump(libxlDriverPrivatePtr driver,
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;