On 2/1/22 15:43, Michal Privoznik wrote: > When virNodeDeviceObjListRemove() is called, the passed > virNodeDeviceObj is removed from internal list of node devices > and then unrefed and unlocked. While the former is warranted (the > object was refed at the beginning of the function) the unlock is > not. In fact, it's wrong from conceptual POV. We still want > threads working on the object tu mutually exclude each other. > > Signed-off-by: Michal Privoznik <mprivozn@xxxxxxxxxx> > --- > src/conf/virnodedeviceobj.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/src/conf/virnodedeviceobj.c b/src/conf/virnodedeviceobj.c > index 2e4ef2df3c..7a560349d4 100644 > --- a/src/conf/virnodedeviceobj.c > +++ b/src/conf/virnodedeviceobj.c > @@ -524,7 +524,7 @@ virNodeDeviceObjListRemove(virNodeDeviceObjList *devs, > virObjectRWLockWrite(devs); > virObjectLock(obj); > virNodeDeviceObjListRemoveLocked(devs, obj); > - virNodeDeviceObjEndAPI(&obj); > + virObjectUnref(obj); > virObjectRWUnlock(devs); > } > Self-NAK, I need to squash in two more bits. Michal