]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
close callback: make unregister clean after connect close event
authorNikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
Wed, 17 Feb 2016 12:14:56 +0000 (15:14 +0300)
committerDaniel P. Berrange <berrange@redhat.com>
Tue, 1 Mar 2016 14:16:56 +0000 (14:16 +0000)
If connect close is fired then following unregister will fail
as we set callback to NULL and thus callback equality checking
will fail.

Callback is set to NULL to make it fired only one time probabaly.
Instead lets use connection equality to NULL to check if callback
is already fired.

Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
src/datatypes.c

index a60b05c02b59c3f4bcc92dd1d79db127f6414bc4..8d90a4aa0f7f3ee73fde3ef193f9b0e5ac6f1aad 100644 (file)
@@ -239,7 +239,7 @@ void virConnectCloseCallbackDataCall(virConnectCloseCallbackDataPtr close,
 {
     virObjectLock(close);
 
-    if (!close->callback)
+    if (!close->conn)
         goto exit;
 
     VIR_DEBUG("Triggering connection close callback %p reason=%d, opaque=%p",
@@ -248,7 +248,6 @@ void virConnectCloseCallbackDataCall(virConnectCloseCallbackDataPtr close,
 
     if (close->freeCallback)
         close->freeCallback(close->opaque);
-    close->callback = NULL;
     close->freeCallback = NULL;
     virObjectUnref(close->conn);
     close->conn = NULL;