]> git.ipfire.org Git - thirdparty/libvirt.git/commit
secret: Handle object list removal and deletion properly
authorJohn Ferlan <jferlan@redhat.com>
Thu, 1 Jun 2017 16:43:06 +0000 (12:43 -0400)
committerJohn Ferlan <jferlan@redhat.com>
Tue, 25 Jul 2017 13:15:30 +0000 (09:15 -0400)
commit867bcc9c783cc07fc73413028a13ebf449cfb9d1
tree27b7952c1187a73ce9e74dd279b6c75d991e3d00
parentd04bc0278d25f41272318ba72f11011874472481
secret: Handle object list removal and deletion properly

Rather than rely on virSecretObjEndAPI to make the final virObjectUnref
after the call to virSecretObjListRemove, be more explicit by calling
virObjectUnref and setting @obj to NULL for secretUndefine and in
the error path of secretDefineXML. Calling EndAPI will end up calling
Unlock on an already unlocked object which has indeteriminate results
(usually an ignored error).

The virSecretObjEndAPI will both Unref and Unlock the object; however,
the virSecretObjListRemove would have already Unlock'd the object so
calling Unlock again is incorrect. Once the virSecretObjListRemove
is called all that's left is to Unref our interest since that's the
corrollary to the virSecretObjListAdd which returned our ref interest
plus references for each hash table in which the object resides. In math
terms, after an Add there's 2 refs on the object (1 for the object and
1 for the list). After calling Remove there's just 1 ref on the object.
For the Add callers, calling EndAPI removes the ref for the object and
unlocks it, but since it's in a list the other 1 remains.

Signed-off-by: John Ferlan <jferlan@redhat.com>
src/secret/secret_driver.c