• P
    conf: Refactor domain list collection critical section · cbe7bbf7
    Peter Krempa 提交于
    Until now the virDomainListAllDomains API would lock the domain list and
    then every single domain object to access and filter it. This would
    potentially allow a unresponsive VM to block the whole daemon if a
    *listAllDomains call would get stuck.
    
    To avoid this problem this patch collects a list of referenced domain
    objects first from the list and then unlocks it right away. The
    expensive operation requiring locking of the domain object is executed
    after the list lock is dropped. While a single blocked domain will still
    lock up a listAllDomains call, the domain list won't be held locked and
    thus other APIs won't be blocked.
    
    Additionally this patch also fixes the lookup code, where we'd ignore
    the vm->removing flag and thus potentially return domain objects that
    would be deleted very soon so calling any API wouldn't make sense.
    
    As other clients also could benefit from operating on a list of domain
    objects rather than the public domain descriptors a new intermediate
    API - virDomainObjListCollect - is introduced by this patch.
    
    Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1181074
    cbe7bbf7
libvirt_private.syms 54.1 KB