]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
udevRemoveOneDevice: Unlock node device obj upon return
authorMichal Privoznik <mprivozn@redhat.com>
Mon, 20 Apr 2020 13:40:01 +0000 (15:40 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Wed, 22 Apr 2020 10:51:15 +0000 (12:51 +0200)
When removing a node device object from the internal list the
udevRemoveOneDevice() function does plain unref over the object.
This is not sufficient. If there is another thread that's waiting
for the object lock it will wait forever.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/node_device/node_device_udev.c

index 3149de8321989db783dc3e5b7cbf83310f180bcd..0166a13b0fb230460ffcc95574b9f25ff04aad61 100644 (file)
@@ -1244,7 +1244,7 @@ udevRemoveOneDevice(struct udev_device *device)
     VIR_DEBUG("Removing device '%s' with sysfs path '%s'",
               def->name, name);
     virNodeDeviceObjListRemove(driver->devs, obj);
-    virObjectUnref(obj);
+    virNodeDeviceObjEndAPI(&obj);
 
     virObjectEventStateQueue(driver->nodeDeviceEventState, event);
     return 0;