]> xenbits.xensource.com Git - libvirt.git/commitdiff
virConnectCloseCallbackData: factor out callback disarming
authorNikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
Wed, 17 Feb 2016 12:14:57 +0000 (15:14 +0300)
committerDaniel P. Berrange <berrange@redhat.com>
Tue, 1 Mar 2016 14:16:56 +0000 (14:16 +0000)
src/datatypes.c

index 8d90a4aa0f7f3ee73fde3ef193f9b0e5ac6f1aad..4258358d263011df1eb95870ebd1342f5178cdd8 100644 (file)
@@ -165,6 +165,18 @@ virConnectDispose(void *obj)
 }
 
 
+static
+void virConnectCloseCallbackDataReset(virConnectCloseCallbackDataPtr close)
+{
+    if (close->freeCallback)
+        close->freeCallback(close->opaque);
+
+    close->freeCallback = NULL;
+    close->opaque = NULL;
+    virObjectUnref(close->conn);
+    close->conn = NULL;
+}
+
 /**
  * virConnectCloseCallbackDataDispose:
  * @obj: the close callback data to release
@@ -178,9 +190,7 @@ virConnectCloseCallbackDataDispose(void *obj)
 
     virObjectLock(cb);
 
-    if (cb->freeCallback)
-        cb->freeCallback(cb->opaque);
-    virObjectUnref(cb->conn);
+    virConnectCloseCallbackDataReset(cb);
 
     virObjectUnlock(cb);
 }
@@ -222,12 +232,8 @@ void virConnectCloseCallbackDataUnregister(virConnectCloseCallbackDataPtr close,
         goto cleanup;
     }
 
+    virConnectCloseCallbackDataReset(close);
     close->callback = NULL;
-    if (close->freeCallback)
-        close->freeCallback(close->opaque);
-    close->freeCallback = NULL;
-    virObjectUnref(close->conn);
-    close->conn = NULL;
 
  cleanup:
 
@@ -246,11 +252,7 @@ void virConnectCloseCallbackDataCall(virConnectCloseCallbackDataPtr close,
               close->callback, reason, close->opaque);
     close->callback(close->conn, reason, close->opaque);
 
-    if (close->freeCallback)
-        close->freeCallback(close->opaque);
-    close->freeCallback = NULL;
-    virObjectUnref(close->conn);
-    close->conn = NULL;
+    virConnectCloseCallbackDataReset(close);
 
  exit:
     virObjectUnlock(close);