[libvirt] [PATCH] qemu: unlock qemu driver before return
Wen Congyang
wency at cn.fujitsu.com
Wed Mar 30 02:30:48 UTC 2011
At 03/30/2011 09:49 AM, Hu Tao Write:
> ---
> src/qemu/qemu_driver.c | 2 ++
> 1 files changed, 2 insertions(+), 0 deletions(-)
>
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 104e92d..6e3edde 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -2068,12 +2068,14 @@ static int qemudDomainSave(virDomainPtr dom, const char *path)
> qemuReportError(VIR_ERR_OPERATION_FAILED,
> "%s", _("Invalid save image format specified "
> "in configuration file"));
> + qemuDriverUnlock(driver);
> return -1;
> }
> if (!qemudCompressProgramAvailable(compressed)) {
> qemuReportError(VIR_ERR_OPERATION_FAILED,
> "%s", _("Compression program for image format "
> "in configuration file isn't available"));
> + qemuDriverUnlock(driver);
> return -1;
> }
> }
I checked all the place where calling qemuDriverLock(), and I found 2 similar problem:
1. qemudStartup():
=================
*qemuDriverUnlock(qemu_driver);*
qemuAutostartDomains(qemu_driver);
qemu_driver->workerPool = virThreadPoolNew(0, 1, processWatchdogEvent, qemu_driver);
if (!qemu_driver->workerPool)
goto error;
if (conn)
virConnectClose(conn);
return 0;
out_of_memory:
virReportOOMError();
error:
if (qemu_driver)
*qemuDriverUnlock(qemu_driver);*
=================
We unlock qemu_driver twice when virThreadPoolNew() failed.
I think we should lock qemu_driver again before calling virThreadPoolNew().
2. processWatchdogEvent():
=================
switch (wdEvent->action) {
case VIR_DOMAIN_WATCHDOG_ACTION_DUMP:
{
....
qemuDriverLock(driver);
virDomainObjLock(wdEvent->vm);
if (qemuDomainObjBeginJobWithDriver(driver, wdEvent->vm) < 0)
break;
if (!virDomainObjIsActive(wdEvent->vm)) {
qemuReportError(VIR_ERR_OPERATION_INVALID,
"%s", _("domain is not running"));
break;
}
=================
We lock qemu_driver and vm, but we do not unlock them when qemuDomainObjBeginJobWithDriver()
failed or the vm is not running.
More information about the libvir-list
mailing list