• M
    qemu: avoid rare race when undefining domain · c7d1c139
    Martin Kletzander 提交于
    When one domain is being undefined and at the same time started, for
    example, there is a possibility of a rare problem occuring.
    
     - Thread 1 does virDomainUndefine(), has the lock, checks that the
       domain is active and because it's not, calls
       virDomainObjListRemove().
    
     - Thread 2 does virDomainCreate() and tries to lock the domain.
    
     - Thread 1 needs to lock domain list in order to remove the domain from
       it, but must unlock domain first (proper order is to lock domain list
       first and the domain itself second).
    
     - Thread 2 grabs the lock, starts the domain and releases the lock.
    
     - Thread 1 grabs the lock and removes the domain from list.
    
    With this patch:
    
     - The undefining domain gets marked as "to undefine" before it is
        unlocked.
    
     - If domain is found in any of the search APIs, it's returned only if
       it is not marked as "to undefine".  The check is done while the
       domain is locked.
    
    Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1150505Signed-off-by: NMartin Kletzander <mkletzan@redhat.com>
    c7d1c139
domain_conf.c 696.8 KB