mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
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:
parent
53850638d8
commit
bc27d34e3b
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user