On Tue, Feb 02, 2010 at 09:27:35PM +0100, Daniel Veillard wrote: > On Tue, Feb 02, 2010 at 02:54:12PM -0500, David Allan wrote: > > * The original udev node device backend neglected to lock the driverState struct containing the device list when adding and removing devices. > > --- > > src/node_device/node_device_udev.c | 6 ++++++ > > 1 files changed, 6 insertions(+), 0 deletions(-) > > > > diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c > > index 2bc2d32..be765c4 100644 > > --- a/src/node_device/node_device_udev.c > > +++ b/src/node_device/node_device_udev.c > > @@ -1190,7 +1190,9 @@ static int udevRemoveOneDevice(struct udev_device *device) > > int ret = 0; > > > > name = udev_device_get_syspath(device); > > + nodeDeviceLock(driverState); > > dev = virNodeDeviceFindBySysfsPath(&driverState->devs, name); > > + > > if (dev != NULL) { > > VIR_DEBUG("Removing device '%s' with sysfs path '%s'", > > dev->def->name, name); > > @@ -1200,6 +1202,7 @@ static int udevRemoveOneDevice(struct udev_device *device) > > name); > > ret = -1; > > } > > + nodeDeviceUnlock(driverState); > > > > return ret; > > } > > @@ -1288,7 +1291,10 @@ static int udevAddOneDevice(struct udev_device *device) > > goto out; > > } > > > > + nodeDeviceLock(driverState); > > dev = virNodeDeviceAssignDef(NULL, &driverState->devs, def); > > + nodeDeviceUnlock(driverState); > > + > > if (dev == NULL) { > > VIR_ERROR("Failed to create device for '%s'", def->name); > > virNodeDeviceDefFree(def); > > ACK, looks fine to me, Okay, applied ! Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@xxxxxxxxxxxx | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list