static virSecretDriverState *driver;
-static void
-secretDriverLock(void)
-{
- virMutexLock(&mutex);
-}
-
-
-static void
-secretDriverUnlock(void)
-{
- virMutexUnlock(&mutex);
-}
-
-
static virSecretObj *
secretObjFromSecret(virSecretPtr secret)
{
static int
-secretStateCleanup(void)
+secretStateCleanupLocked(void)
{
if (!driver)
return -1;
- secretDriverLock();
-
virObjectUnref(driver->secrets);
VIR_FREE(driver->configDir);
virPidFileRelease(driver->stateDir, "driver", driver->lockFD);
VIR_FREE(driver->stateDir);
- secretDriverUnlock();
VIR_FREE(driver);
return 0;
}
+static int
+secretStateCleanup(void)
+{
+ VIR_LOCK_GUARD lock = virLockGuardLock(&mutex);
+
+ return secretStateCleanupLocked();
+}
+
static int
secretStateInitialize(bool privileged,
virStateInhibitCallback callback G_GNUC_UNUSED,
void *opaque G_GNUC_UNUSED)
{
+ VIR_LOCK_GUARD lock = virLockGuardLock(&mutex);
+
driver = g_new0(virSecretDriverState, 1);
driver->lockFD = -1;
- secretDriverLock();
-
driver->secretEventState = virObjectEventStateNew();
driver->privileged = privileged;
if (virSecretLoadAllConfigs(driver->secrets, driver->configDir) < 0)
goto error;
- secretDriverUnlock();
return VIR_DRV_STATE_INIT_COMPLETE;
error:
- secretDriverUnlock();
- secretStateCleanup();
+ secretStateCleanupLocked();
return VIR_DRV_STATE_INIT_ERROR;
}
static int
secretStateReload(void)
{
+ VIR_LOCK_GUARD lock = virLockGuardLock(&mutex);
+
if (!driver)
return -1;
- secretDriverLock();
-
ignore_value(virSecretLoadAllConfigs(driver->secrets, driver->configDir));
- secretDriverUnlock();
return 0;
}
return VIR_DRV_OPEN_ERROR;
if (driver->embeddedRoot) {
- secretDriverLock();
- if (driver->embeddedRefs == 0)
- virSetConnectSecret(conn);
- driver->embeddedRefs++;
- secretDriverUnlock();
+ VIR_WITH_MUTEX_LOCK_GUARD(&mutex) {
+ if (driver->embeddedRefs == 0)
+ virSetConnectSecret(conn);
+ driver->embeddedRefs++;
+ }
}
return VIR_DRV_OPEN_SUCCESS;
static int secretConnectClose(virConnectPtr conn G_GNUC_UNUSED)
{
+ VIR_LOCK_GUARD lock = virLockGuardLock(&mutex);
+
if (driver->embeddedRoot) {
- secretDriverLock();
driver->embeddedRefs--;
if (driver->embeddedRefs == 0)
virSetConnectSecret(NULL);
- secretDriverUnlock();
}
return 0;
}