[libvirt] [PATCH v3 11/13] Protect USB/PCI device list access in QEMU with dedicated locks

Jiri Denemark jdenemar at redhat.com
Tue Feb 5 08:27:44 UTC 2013


On Fri, Feb 01, 2013 at 11:18:33 +0000, Daniel P. Berrange wrote:
> From: "Daniel P. Berrange" <berrange at redhat.com>
> 
> Currently the activePciHostdevs, inactivePciHostdevsd and
> activeUsbHostdevs lists are all implicitly protected by the
> QEMU driver lock. Now that the lists all inherit from the
> virObjectLockable, we can make the locking explicit, removing
> the dependency on the QEMU driver lock for correctness.
...
> diff --git a/src/qemu/qemu_hostdev.c b/src/qemu/qemu_hostdev.c
> index 3dfcf63..34a339c 100644
> --- a/src/qemu/qemu_hostdev.c
> +++ b/src/qemu/qemu_hostdev.c
...
> @@ -165,10 +175,12 @@ qemuUpdateActiveUsbHostdevs(virQEMUDriverPtr driver,
>  {
>      virDomainHostdevDefPtr hostdev = NULL;
>      int i;
> +    int ret = -1;
>  
>      if (!def->nhostdevs)
>          return 0;
>  
> +    virObjectLock(driver->activeUsbHostdevs);
>      for (i = 0; i < def->nhostdevs; i++) {
>          virUSBDevicePtr usb = NULL;
>          hostdev = def->hostdevs[i];
> @@ -193,11 +205,13 @@ qemuUpdateActiveUsbHostdevs(virQEMUDriverPtr driver,
>  
>          if (virUSBDeviceListAdd(driver->activeUsbHostdevs, usb) < 0) {
>              virUSBDeviceFree(usb);
> -            return -1;
> +            goto cleanup;
>          }
>      }
> -
> -    return 0;
> +    ret = 0;
> +cleanup:
> +    virObjectLock(driver->activeUsbHostdevs);

Bad copy&paste, you really should call virObjectUnlock here :-)

> +    return ret;
>  }
>  
>  static int

ACK with the typo fixed.

Jirka




More information about the libvir-list mailing list