virConnectCloseCallbackData: factor out callback disarming

This commit is contained in:
Nikolay Shirokovskiy 2016-02-17 15:14:57 +03:00 committed by Daniel P. Berrange
parent 42b0f7510d
commit baf47a1f5a

View 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: * virConnectCloseCallbackDataDispose:
* @obj: the close callback data to release * @obj: the close callback data to release
@ -178,9 +190,7 @@ virConnectCloseCallbackDataDispose(void *obj)
virObjectLock(cb); virObjectLock(cb);
if (cb->freeCallback) virConnectCloseCallbackDataReset(cb);
cb->freeCallback(cb->opaque);
virObjectUnref(cb->conn);
virObjectUnlock(cb); virObjectUnlock(cb);
} }
@ -222,12 +232,8 @@ void virConnectCloseCallbackDataUnregister(virConnectCloseCallbackDataPtr close,
goto cleanup; goto cleanup;
} }
virConnectCloseCallbackDataReset(close);
close->callback = NULL; close->callback = NULL;
if (close->freeCallback)
close->freeCallback(close->opaque);
close->freeCallback = NULL;
virObjectUnref(close->conn);
close->conn = NULL;
cleanup: cleanup:
@ -246,11 +252,7 @@ void virConnectCloseCallbackDataCall(virConnectCloseCallbackDataPtr close,
close->callback, reason, close->opaque); close->callback, reason, close->opaque);
close->callback(close->conn, reason, close->opaque); close->callback(close->conn, reason, close->opaque);
if (close->freeCallback) virConnectCloseCallbackDataReset(close);
close->freeCallback(close->opaque);
close->freeCallback = NULL;
virObjectUnref(close->conn);
close->conn = NULL;
exit: exit:
virObjectUnlock(close); virObjectUnlock(close);