
❦ 24 juillet 2016 23:13 CEST, Vincent Bernat <bernat@luffy.cx> :
I am trying to figure out how to reliably maintain a connection to libvirtd. From the documentation, I would expect something like that:
- virConnectOpen() - virConnectRegisterCloseCallback() - virConnectSetKeepAlive() - Application logic
And in the registered callback, I would:
- virConnectUnregisterCloseCallback() - virConnectClose() - virConnectOpen() - virConnectRegisterCloseCallback() - virConnectSetKeepAlive()
Well, I am now doing that and it doesn't work as expected. If the connection is unexpectedly disconnected, I get an error when calling virConnectUnregisterclosecallback(): [Code-55] [Domain-20] Requested operation is not valid: A different callback was requested If I don't unregister the callback, virConnectClose() indicates a leak. The same happens for domain events. If the connection is closed unexpectedly, I get: [Code-1] [Domain-7] internal error: client socket is closed I am not even sure that I don't get a leak whatever I do about since I don't see anything that would unset the callbacks when the connection is closed (while this happens for close callback). I see that virsh has the same problem. If I restart libvirt while connected, I get a "One or more references were leaked after disconnect from the hypervisor". -- Tempt not a desperate man. -- William Shakespeare, "Romeo and Juliet"