secret: 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-02-08 14:36:59 +01:00
parent 53850638d8
commit bc27d34e3b

View File

@ -72,20 +72,6 @@ struct _virSecretDriverState {
static virSecretDriverState *driver; static virSecretDriverState *driver;
static void
secretDriverLock(void)
{
virMutexLock(&mutex);
}
static void
secretDriverUnlock(void)
{
virMutexUnlock(&mutex);
}
static virSecretObj * static virSecretObj *
secretObjFromSecret(virSecretPtr secret) secretObjFromSecret(virSecretPtr secret)
{ {
@ -447,13 +433,11 @@ secretUndefine(virSecretPtr secret)
static int static int
secretStateCleanup(void) secretStateCleanupLocked(void)
{ {
if (!driver) if (!driver)
return -1; return -1;
secretDriverLock();
virObjectUnref(driver->secrets); virObjectUnref(driver->secrets);
VIR_FREE(driver->configDir); VIR_FREE(driver->configDir);
@ -463,12 +447,19 @@ secretStateCleanup(void)
virPidFileRelease(driver->stateDir, "driver", driver->lockFD); virPidFileRelease(driver->stateDir, "driver", driver->lockFD);
VIR_FREE(driver->stateDir); VIR_FREE(driver->stateDir);
secretDriverUnlock();
VIR_FREE(driver); VIR_FREE(driver);
return 0; return 0;
} }
static int
secretStateCleanup(void)
{
VIR_LOCK_GUARD lock = virLockGuardLock(&mutex);
return secretStateCleanupLocked();
}
static int static int
secretStateInitialize(bool privileged, secretStateInitialize(bool privileged,
@ -476,11 +467,11 @@ secretStateInitialize(bool privileged,
virStateInhibitCallback callback G_GNUC_UNUSED, virStateInhibitCallback callback G_GNUC_UNUSED,
void *opaque G_GNUC_UNUSED) void *opaque G_GNUC_UNUSED)
{ {
VIR_LOCK_GUARD lock = virLockGuardLock(&mutex);
driver = g_new0(virSecretDriverState, 1); driver = g_new0(virSecretDriverState, 1);
driver->lockFD = -1; driver->lockFD = -1;
secretDriverLock();
driver->secretEventState = virObjectEventStateNew(); driver->secretEventState = virObjectEventStateNew();
driver->privileged = privileged; driver->privileged = privileged;
@ -524,12 +515,10 @@ secretStateInitialize(bool privileged,
if (virSecretLoadAllConfigs(driver->secrets, driver->configDir) < 0) if (virSecretLoadAllConfigs(driver->secrets, driver->configDir) < 0)
goto error; goto error;
secretDriverUnlock();
return VIR_DRV_STATE_INIT_COMPLETE; return VIR_DRV_STATE_INIT_COMPLETE;
error: error:
secretDriverUnlock(); secretStateCleanupLocked();
secretStateCleanup();
return VIR_DRV_STATE_INIT_ERROR; return VIR_DRV_STATE_INIT_ERROR;
} }
@ -537,14 +526,13 @@ secretStateInitialize(bool privileged,
static int static int
secretStateReload(void) secretStateReload(void)
{ {
VIR_LOCK_GUARD lock = virLockGuardLock(&mutex);
if (!driver) if (!driver)
return -1; return -1;
secretDriverLock();
ignore_value(virSecretLoadAllConfigs(driver->secrets, driver->configDir)); ignore_value(virSecretLoadAllConfigs(driver->secrets, driver->configDir));
secretDriverUnlock();
return 0; return 0;
} }
@ -592,11 +580,11 @@ secretConnectOpen(virConnectPtr conn,
return VIR_DRV_OPEN_ERROR; return VIR_DRV_OPEN_ERROR;
if (driver->embeddedRoot) { if (driver->embeddedRoot) {
secretDriverLock(); VIR_WITH_MUTEX_LOCK_GUARD(&mutex) {
if (driver->embeddedRefs == 0) if (driver->embeddedRefs == 0)
virSetConnectSecret(conn); virSetConnectSecret(conn);
driver->embeddedRefs++; driver->embeddedRefs++;
secretDriverUnlock(); }
} }
return VIR_DRV_OPEN_SUCCESS; return VIR_DRV_OPEN_SUCCESS;
@ -604,12 +592,12 @@ secretConnectOpen(virConnectPtr conn,
static int secretConnectClose(virConnectPtr conn G_GNUC_UNUSED) static int secretConnectClose(virConnectPtr conn G_GNUC_UNUSED)
{ {
VIR_LOCK_GUARD lock = virLockGuardLock(&mutex);
if (driver->embeddedRoot) { if (driver->embeddedRoot) {
secretDriverLock();
driver->embeddedRefs--; driver->embeddedRefs--;
if (driver->embeddedRefs == 0) if (driver->embeddedRefs == 0)
virSetConnectSecret(NULL); virSetConnectSecret(NULL);
secretDriverUnlock();
} }
return 0; return 0;
} }