vz_driver: Use automatic mutex management

Signed-off-by: Tim Wiederhake <twiederh@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Tim Wiederhake 2022-04-04 11:03:51 +02:00
parent c8f5b33631
commit 6be7beb3bd

View File

@ -2018,53 +2018,43 @@ vzConnectRegisterCloseCallback(virConnectPtr conn,
virFreeCallback freecb) virFreeCallback freecb)
{ {
struct _vzConn *privconn = conn->privateData; struct _vzConn *privconn = conn->privateData;
int ret = -1;
if (virConnectRegisterCloseCallbackEnsureACL(conn) < 0) if (virConnectRegisterCloseCallbackEnsureACL(conn) < 0)
return -1; return -1;
virObjectLock(privconn->driver); VIR_WITH_OBJECT_LOCK_GUARD(privconn->driver) {
if (virConnectCloseCallbackDataGetCallback(privconn->closeCallback) != NULL) {
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
_("A close callback is already registered"));
return -1;
}
if (virConnectCloseCallbackDataGetCallback(privconn->closeCallback) != NULL) { virConnectCloseCallbackDataRegister(privconn->closeCallback, conn, cb,
virReportError(VIR_ERR_OPERATION_INVALID, "%s", opaque, freecb);
_("A close callback is already registered"));
goto cleanup;
} }
virConnectCloseCallbackDataRegister(privconn->closeCallback, conn, cb, return 0;
opaque, freecb);
ret = 0;
cleanup:
virObjectUnlock(privconn->driver);
return ret;
} }
static int static int
vzConnectUnregisterCloseCallback(virConnectPtr conn, virConnectCloseFunc cb) vzConnectUnregisterCloseCallback(virConnectPtr conn, virConnectCloseFunc cb)
{ {
struct _vzConn *privconn = conn->privateData; struct _vzConn *privconn = conn->privateData;
int ret = -1;
if (virConnectUnregisterCloseCallbackEnsureACL(conn) < 0) if (virConnectUnregisterCloseCallbackEnsureACL(conn) < 0)
return -1; return -1;
virObjectLock(privconn->driver); VIR_WITH_OBJECT_LOCK_GUARD(privconn->driver) {
if (virConnectCloseCallbackDataGetCallback(privconn->closeCallback) != cb) {
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
_("A different callback was requested"));
return -1;
}
if (virConnectCloseCallbackDataGetCallback(privconn->closeCallback) != cb) { virConnectCloseCallbackDataUnregister(privconn->closeCallback, cb);
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
_("A different callback was requested"));
goto cleanup;
} }
virConnectCloseCallbackDataUnregister(privconn->closeCallback, cb); return 0;
ret = 0;
cleanup:
virObjectUnlock(privconn->driver);
return ret;
} }
static int vzDomainSetMemoryFlags(virDomainPtr domain, unsigned long memory, static int vzDomainSetMemoryFlags(virDomainPtr domain, unsigned long memory,
@ -3795,9 +3785,9 @@ vzConnectGetAllDomainStats(virConnectPtr conn,
virDomainStatsRecordPtr tmp; virDomainStatsRecordPtr tmp;
virDomainObj *dom = doms[i]; virDomainObj *dom = doms[i];
virObjectLock(dom); VIR_WITH_OBJECT_LOCK_GUARD(dom) {
tmp = vzDomainGetAllStats(conn, dom); tmp = vzDomainGetAllStats(conn, dom);
virObjectUnlock(dom); }
if (!tmp) if (!tmp)
goto cleanup; goto cleanup;