util: cache the result of whether logind is available

Similar to how we cache the availability of machined.

Signed-off-by: Ján Tomko <jtomko@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Ján Tomko 2019-08-13 16:34:30 +02:00
parent 81177ff4de
commit dd16434a2a
4 changed files with 25 additions and 4 deletions

View File

@ -3135,6 +3135,7 @@ virSystemdCanSuspend;
virSystemdCreateMachine;
virSystemdGetActivation;
virSystemdGetMachineNameByPID;
virSystemdHasLogindResetCachedValue;
virSystemdHasMachinedResetCachedValue;
virSystemdMakeScopeName;
virSystemdMakeSliceName;

View File

@ -140,6 +140,7 @@ char *virSystemdMakeSliceName(const char *partition)
}
static int virSystemdHasMachinedCachedValue = -1;
static int virSystemdHasLogindCachedValue = -1;
/* Reset the cache from tests for testing the underlying dbus calls
* as well */
@ -148,6 +149,12 @@ void virSystemdHasMachinedResetCachedValue(void)
virSystemdHasMachinedCachedValue = -1;
}
void virSystemdHasLogindResetCachedValue(void)
{
virSystemdHasLogindCachedValue = -1;
}
/* -2 = machine1 is not supported on this machine
* -1 = error
* 0 = machine1 is available
@ -178,14 +185,23 @@ static int
virSystemdHasLogind(void)
{
int ret;
int val;
val = virAtomicIntGet(&virSystemdHasLogindCachedValue);
if (val != -1)
return val;
ret = virDBusIsServiceEnabled("org.freedesktop.login1");
if (ret < 0)
return ret;
if ((ret = virDBusIsServiceRegistered("org.freedesktop.login1")) < 0)
if (ret < 0) {
if (ret == -2)
virAtomicIntSet(&virSystemdHasLogindCachedValue, -2);
return ret;
}
if ((ret = virDBusIsServiceRegistered("org.freedesktop.login1")) == -1)
return ret;
virAtomicIntSet(&virSystemdHasLogindCachedValue, ret);
return ret;
}

View File

@ -28,3 +28,4 @@
#include "virsystemd.h"
void virSystemdHasMachinedResetCachedValue(void);
void virSystemdHasLogindResetCachedValue(void);

View File

@ -751,12 +751,15 @@ mymain(void)
}; \
if (virTestRun("Test " name " ", testPMSupportHelper, &data) < 0) \
ret = -1; \
virSystemdHasLogindResetCachedValue(); \
if (virTestRun("Test " name " no systemd ", \
testPMSupportHelperNoSystemd, &data) < 0) \
ret = -1; \
virSystemdHasLogindResetCachedValue(); \
if (virTestRun("Test systemd " name " not running ", \
testPMSupportSystemdNotRunning, &data) < 0) \
ret = -1; \
virSystemdHasLogindResetCachedValue(); \
} while (0)
TESTS_PM_SUPPORT_HELPER("canSuspend", &virSystemdCanSuspend);