diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c index fcbeaf5ca3cbf13fe8310bbb113a8f6ca7e8fbe3..cad4b0d22da712453a21756261e5055c07dbc7a4 100644 --- a/src/libxl/libxl_domain.c +++ b/src/libxl/libxl_domain.c @@ -756,3 +756,47 @@ error: } return -1; } + +/* + * Core dump domain to default dump path. + * + * virDomainObjPtr must be locked on invocation + */ +int +libxlDomainAutoCoreDump(libxlDriverPrivatePtr driver, + virDomainObjPtr vm) +{ + libxlDomainObjPrivatePtr priv = vm->privateData; + libxlDriverConfigPtr cfg = libxlDriverConfigGet(driver); + time_t curtime = time(NULL); + char timestr[100]; + struct tm time_info; + char *dumpfile = NULL; + int ret = -1; + + localtime_r(&curtime, &time_info); + strftime(timestr, sizeof(timestr), "%Y-%m-%d-%H:%M:%S", &time_info); + + if (virAsprintf(&dumpfile, "%s/%s-%s", + cfg->autoDumpDir, + vm->def->name, + timestr) < 0) + goto cleanup; + + if (libxlDomainObjBeginJob(driver, vm, LIBXL_JOB_MODIFY) < 0) + goto cleanup; + + /* Unlock virDomainObj while dumping core */ + virObjectUnlock(vm); + libxl_domain_core_dump(priv->ctx, vm->def->id, dumpfile, NULL); + virObjectLock(vm); + + ignore_value(libxlDomainObjEndJob(driver, vm)); + ret = 0; + +cleanup: + VIR_FREE(dumpfile); + virObjectUnref(cfg); + + return ret; +} diff --git a/src/libxl/libxl_domain.h b/src/libxl/libxl_domain.h index 1ac91745f0b92370c927cb188e3687adc1a9d201..a50efd3179bb0dc62fe5e62e8ba65c469cd0c7f6 100644 --- a/src/libxl/libxl_domain.h +++ b/src/libxl/libxl_domain.h @@ -119,4 +119,8 @@ libxlDomainCleanupJob(libxlDriverPrivatePtr driver, int libxlDomainEventsRegister(virDomainObjPtr vm); +int +libxlDomainAutoCoreDump(libxlDriverPrivatePtr driver, + virDomainObjPtr vm); + #endif /* LIBXL_DOMAIN_H */ diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index e473ab9d942827b7dbc02f3e065390e7db0bbd29..9fe0d1d49244f89b90250cd6aa873199e29bb277 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -169,50 +169,6 @@ cleanup: } -/* - * Core dump domain to default dump path. - * - * virDomainObjPtr must be locked on invocation - */ -static int -libxlDomainAutoCoreDump(libxlDriverPrivatePtr driver, - virDomainObjPtr vm) -{ - libxlDomainObjPrivatePtr priv = vm->privateData; - libxlDriverConfigPtr cfg = libxlDriverConfigGet(driver); - time_t curtime = time(NULL); - char timestr[100]; - struct tm time_info; - char *dumpfile = NULL; - int ret = -1; - - localtime_r(&curtime, &time_info); - strftime(timestr, sizeof(timestr), "%Y-%m-%d-%H:%M:%S", &time_info); - - if (virAsprintf(&dumpfile, "%s/%s-%s", - cfg->autoDumpDir, - vm->def->name, - timestr) < 0) - goto cleanup; - - if (libxlDomainObjBeginJob(driver, vm, LIBXL_JOB_MODIFY) < 0) - goto cleanup; - - /* Unlock virDomainObj while dumping core */ - virObjectUnlock(vm); - libxl_domain_core_dump(priv->ctx, vm->def->id, dumpfile, NULL); - virObjectLock(vm); - - ignore_value(libxlDomainObjEndJob(driver, vm)); - ret = 0; - -cleanup: - VIR_FREE(dumpfile); - virObjectUnref(cfg); - - return ret; -} - /* * Handle previously registered event notification from libxenlight. *