Am Donnerstag 24 März 2011 16:55:23 schrieb Jim Fehlig:
Markus Groß wrote:
> ---
> src/libxl/libxl_driver.c | 114 +++++++++++++++++++++++++++++++++++++++++++++-
> 1 files changed, 112 insertions(+), 2 deletions(-)
>
> diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
> index 4b31197..669c170 100644
> --- a/src/libxl/libxl_driver.c
> +++ b/src/libxl/libxl_driver.c
> @@ -1041,6 +1041,116 @@ libxlDomainLookupByName(virConnectPtr conn, const char
*name)
> }
>
> static int
> +libxlDomainSuspend(virDomainPtr dom)
> +{
> + libxlDriverPrivatePtr driver = dom->conn->privateData;
> + virDomainObjPtr vm;
> + libxlDomainObjPrivatePtr priv;
> + virDomainEventPtr event = NULL;
> + int ret = -1;
> +
> + libxlDriverLock(driver);
> + vm = virDomainFindByUUID(&driver->domains, dom->uuid);
>
Is there any reason the driver can't be unlocked here?
Thanks for pointing that out. I think it will be sufficient to limit the locking to the
libxlDomainEventQueue call.
> + }
> +
> + if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0)
> + goto cleanup;
> +
> + ret = 0;
> +
> +cleanup:
> + if (vm)
> + virDomainObjUnlock(vm);
> + if (event)
> + libxlDomainEventQueue(driver, event);
> + libxlDriverUnlock(driver);
> + return ret;
> +}
> +
> +
> +static int
> +libxlDomainResume(virDomainPtr dom)
> +{
> + libxlDriverPrivatePtr driver = dom->conn->privateData;
> + virDomainObjPtr vm;
> + libxlDomainObjPrivatePtr priv;
> + virDomainEventPtr event = NULL;
> + int ret = -1;
> +
> + libxlDriverLock(driver);
> + vm = virDomainFindByUUID(&driver->domains, dom->uuid);
>
Same question here about unlocking the driver.
See my answer above.
Thanks,
Markus