• M
    Always close drivers when a virConnectPtr is released · d8b36749
    Matthias Bolte 提交于
    virConnectClose calls virUnrefConnect which in turn closes
    all open drivers when the refcount of that connection dropped
    to zero. This works fine when you free all other objects that
    hold a ref to the connection before you close it, because in
    this case virUnrefConnect is the one that removes the last
    ref to the connection.
    
    But it doesn't work when you close the connection first before
    freeing the other objects. This is because the other virUnref*
    functions call virReleaseConnect when they detect that the
    connection's refcount dropped to zero. In this case another
    virUnref* function (different from virUnrefConnect) removes the
    last ref to the connection. This results in not closing the
    open drivers and leaking things that should have been cleaned
    up in the driver close functions.
    
    To fix this move the driver close calls to virReleaseConnect.
    d8b36749
datatypes.c 45.7 KB