867bcc9 secret: Handle object list removal and deletion properly

Authored and Committed by John Ferlan 6 years ago
    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>
    
        
file modified
+4 -0