• M
    daemon: Run virStateCleanup conditionally · a602e90b
    Michal Privoznik 提交于
    https://bugzilla.redhat.com/show_bug.cgi?id=1033061
    
    Currently, initialization of drivers is done in a separate thread. This
    is done for several reasons: a driver that is initialized may require
    running event loop, it may take ages to initialize driver (e.g. due to
    autostarting domains). While the thread is spawn and run, the main()
    continues its execution. However, if something goes bad, or the event
    loop is just exited (e.g. due to a --timeout or SIGINT) we try to
    cleanup all the drivers. So we have two threads running Initialize() and
    Cleanup() concurrently. This may result in accessing stale pointers -
    e.g. netcf driver will free() itself in stateCleanup callback, while the
    init thread may come, open a dummy connection in order to autostart some
    domains and voilà: do_open() iterates over interface drivers and
    accesses stale netcf driver.
    
    The fix consists in not running stateCleanup if the init thread is still
    running.
    Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
    a602e90b
libvirtd.c 45.8 KB