• J
    conf: Clean up object referencing for Add and Remove · b04629b6
    John Ferlan 提交于
    When adding a new object to the domain object list, there should
    have been 2 virObjectRef calls made one for each list into which
    the object was placed to match the 2 virObjectUnref calls that
    would occur during Remove as part of virHashRemoveEntry when
    virObjectFreeHashData is called when the element is removed from
    the hash table as set up in virDomainObjListNew.
    
    Some drivers (libxl, lxc, qemu, and vz) handled this inconsistency
    by calling virObjectRef upon successful return from virDomainObjListAdd
    in order to use virDomainObjEndAPI when done with the returned @vm.
    While others (bhyve, openvz, test, and vmware) handled this via only
    calling virObjectUnlock upon successful return from virDomainObjListAdd.
    
    This patch will "unify" the approach to use virDomainObjEndAPI
    for any @vm successfully returned from virDomainObjListAdd.
    
    Because list removal is so tightly coupled with list addition,
    this patch fixes the list removal algorithm to return the object
    as entered - "locked and reffed".  This way, the callers can then
    decide how to uniformly handle add/remove success and failure.
    This removes the onus on the caller to "specially handle" the
    @vm during removal processing.
    
    The Add/Remove logic allows for some logic simplification such
    as in libxl where we can Remove the @vm directly rather than
    needing to set a @remove_dom boolean and removing after the
    libxlDomainObjEndJob completes as the @vm is locked/reffed.
    Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
    Reviewed-by: NErik Skultety <eskultet@redhat.com>
    b04629b6
qemu_migration.c 183.8 KB