On 22.09.2016 11:44, Daniel P. Berrange wrote: > On Thu, Sep 22, 2016 at 11:38:50AM +0300, Nikolay Shirokovskiy wrote: >> Default event loop impl delays deleting registered handles and >> timeouts so that deleting is safe from event handlers. But >> this means deletions after event loop is finished will never >> occur and particularly assosiated callback objects will not >> be freed. For this reason network clients that exist at >> the moment of libvirtd daemon exit are never get disposed >> and daemon object itself too if there are admin server clients. >> >> Let's call free callbacks immediately we don't need to delay >> this operation, only removing handles from the list. >> >> This breaks virnetsocket.c immediately as socket is locked >> in freeing callback and callback is called synchronously >> from virNetSocketRemoveIOCallback which holds the lock already. >> So fix it to pass intermediate callback object to the loop >> instead of socket itself. I've checked other users of >> virEventAddHandle, looks like they don't have such problems. > > That is impossible to guarantee. The event loop impl is exposed > via the public API, so arbitrary external applications get to > call it. > > So I don't think it is safe to make this change. > Ok, the other I option I think of is to add call to indicate event loop is finished so that there is no need to defer cleanups. Nikolay -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list