[libvirt] [PATCH] Fix locking in qemudDomainCoreDump

Daniel P. Berrange berrange at redhat.com
Thu Apr 22 16:13:53 UTC 2010


On Thu, Apr 22, 2010 at 04:56:00PM +0200, y at orkuz.home wrote:
> From: Jiri Denemark <jdenemar at redhat.com>
> 
> The hang fix in d376b7d63ec1ef24ba4c812d58b9a414ddb561f8 was incomplete
> since it left quite a few {Enter,Exit}Monitor calls which require driver
> to be unlocked. Since the driver is locked throughout the whole
> function, {Enter,Exit}MonitorWithDriver need to be used instead to
> ensure driver is not locked when issuing monitor commands.
> ---
>  src/qemu/qemu_driver.c |   14 +++++++-------
>  1 files changed, 7 insertions(+), 7 deletions(-)
> 
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 4afed2f..0a0d9bc 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -5165,18 +5165,18 @@ static int qemudDomainCoreDump(virDomainPtr dom,
>  
>      /* Pause domain for non-live dump */
>      if (!(flags & VIR_DUMP_LIVE) && vm->state == VIR_DOMAIN_RUNNING) {
> -        qemuDomainObjEnterMonitor(vm);
> +        qemuDomainObjEnterMonitorWithDriver(driver, vm);
>          if (qemuMonitorStopCPUs(priv->mon) < 0) {
> -            qemuDomainObjExitMonitor(vm);
> +            qemuDomainObjExitMonitorWithDriver(driver, vm);
>              goto endjob;
>          }
> -        qemuDomainObjExitMonitor(vm);
> +        qemuDomainObjExitMonitorWithDriver(driver, vm);
>          paused = 1;
>      }
>  
> -    qemuDomainObjEnterMonitor(vm);
> +    qemuDomainObjEnterMonitorWithDriver(driver, vm);
>      ret = qemuMonitorMigrateToCommand(priv->mon, 1, args, path);
> -    qemuDomainObjExitMonitor(vm);
> +    qemuDomainObjExitMonitorWithDriver(driver, vm);
>  
>      if (ret < 0)
>          goto endjob;
> @@ -5205,13 +5205,13 @@ endjob:
>         will support synchronous operations so we always get here after
>         the migration is complete.  */
>      else if (resume && paused) {
> -        qemuDomainObjEnterMonitor(vm);
> +        qemuDomainObjEnterMonitorWithDriver(driver, vm);
>          if (qemuMonitorStartCPUs(priv->mon, dom->conn) < 0) {
>              if (virGetLastError() == NULL)
>                  qemuReportError(VIR_ERR_OPERATION_FAILED,
>                                  "%s", _("resuming after dump failed"));
>          }
> -        qemuDomainObjExitMonitor(vm);
> +        qemuDomainObjExitMonitorWithDriver(driver, vm);
>      }
>  
>      if (qemuDomainObjEndJob(vm) == 0)

ACK

Daniel
-- 
|: Red Hat, Engineering, London    -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://deltacloud.org :|
|: http://autobuild.org        -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-   F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the libvir-list mailing list