/* Immutable pointer, self-locking APIs */
virObjectEventState *secretEventState;
+
+ /* Immutable pointers. Caller must provide locking */
+ virStateInhibitCallback inhibitCallback;
+ void *inhibitOpaque;
};
static virSecretDriverState *driver;
}
+static bool
+secretNumOfEphemeralSecretsHelper(virConnectPtr conn G_GNUC_UNUSED,
+ virSecretDef *def)
+{
+ return def->isephemeral;
+}
+
+
+static int
+secretNumOfEphemeralSecrets(void)
+{
+ return virSecretObjListNumOfSecrets(driver->secrets,
+ secretNumOfEphemeralSecretsHelper,
+ NULL);
+}
+
+
/* Driver functions */
static int
cleanup:
virSecretDefFree(def);
virSecretObjEndAPI(&obj);
+
+ if (secretNumOfEphemeralSecrets() > 0)
+ driver->inhibitCallback(true, driver->inhibitOpaque);
+
virObjectEventStateQueue(driver->secretEventState, event);
return ret;
cleanup:
virSecretObjEndAPI(&obj);
+
+ if (secretNumOfEphemeralSecrets() == 0)
+ driver->inhibitCallback(false, driver->inhibitOpaque);
+
virObjectEventStateQueue(driver->secretEventState, event);
return ret;
secretStateInitialize(bool privileged,
const char *root,
bool monolithic G_GNUC_UNUSED,
- virStateInhibitCallback callback G_GNUC_UNUSED,
- void *opaque G_GNUC_UNUSED)
+ virStateInhibitCallback callback,
+ void *opaque)
{
VIR_LOCK_GUARD lock = virLockGuardLock(&mutex);
driver->lockFD = -1;
driver->secretEventState = virObjectEventStateNew();
driver->privileged = privileged;
+ driver->inhibitCallback = callback;
+ driver->inhibitOpaque = opaque;
if (root) {
driver->embeddedRoot = g_strdup(root);