1
0
mirror of https://github.com/systemd/systemd.git synced 2025-01-03 05:18:09 +03:00

logind: let system-wide idle begin at the time logind was initialized

Initialize the start of the system-wide idle time with the time logind was
initialized and not with the start of the Unix epoch. This means that systemd
will not repport a unreasonable long idle time (around 54 years at the time of
writing this), especially at in the early boot, while no login manager session,
e.g,. gdm, had a chance to provide a more accurate start of the idle period.

Fixes #35163

(cherry picked from commit 718b31138b)
(cherry picked from commit 9d36809256)
This commit is contained in:
Florian Schmaus 2024-11-16 10:29:35 +01:00 committed by Luca Boccassi
parent aafb208230
commit b26b3cbb71
3 changed files with 9 additions and 1 deletions

View File

@ -404,10 +404,14 @@ int manager_get_user_by_pid(Manager *m, pid_t pid, User **ret) {
int manager_get_idle_hint(Manager *m, dual_timestamp *t) {
Session *s;
bool idle_hint;
dual_timestamp ts = DUAL_TIMESTAMP_NULL;
dual_timestamp ts;
assert(m);
/* Initialize the baseline timestamp with the time the manager got initialized to avoid reporting
* unreasonable large idle periods starting with the Unix epoch. */
ts = m->init_ts;
idle_hint = !manager_is_inhibited(m, INHIBIT_IDLE, INHIBIT_BLOCK, t, false, false, 0, NULL);
HASHMAP_FOREACH(s, m->sessions) {

View File

@ -104,6 +104,8 @@ static int manager_new(Manager **ret) {
(void) sd_event_set_watchdog(m->event, true);
dual_timestamp_now(&m->init_ts);
manager_reset_config(m);
*ret = TAKE_PTR(m);

View File

@ -141,6 +141,8 @@ struct Manager {
char *efi_loader_entry_one_shot;
struct stat efi_loader_entry_one_shot_stat;
dual_timestamp init_ts;
};
void manager_reset_config(Manager *m);