diff --git a/src/login/logind-user.c b/src/login/logind-user.c index 1c2ac81353..c63d214146 100644 --- a/src/login/logind-user.c +++ b/src/login/logind-user.c @@ -371,13 +371,16 @@ static int user_start_runtime_dir(User *u) { return 0; } -static bool user_wants_service_manager(User *u) { +static bool user_wants_service_manager(const User *u) { assert(u); LIST_FOREACH(sessions_by_user, s, u->sessions) if (SESSION_CLASS_WANTS_SERVICE_MANAGER(s->class)) return true; + if (user_check_linger_file(u) > 0) + return true; + return false; } @@ -669,9 +672,12 @@ int user_get_idle_hint(User *u, dual_timestamp *t) { return idle_hint; } -int user_check_linger_file(User *u) { +int user_check_linger_file(const User *u) { _cleanup_free_ char *cc = NULL; - char *p = NULL; + const char *p; + + assert(u); + assert(u->user_record); cc = cescape(u->user_record->user_name); if (!cc) diff --git a/src/login/logind-user.h b/src/login/logind-user.h index 7b10c4fd60..5c82f490f2 100644 --- a/src/login/logind-user.h +++ b/src/login/logind-user.h @@ -82,7 +82,7 @@ int user_get_idle_hint(User *u, dual_timestamp *t); int user_save(User *u); int user_load(User *u); int user_kill(User *u, int signo); -int user_check_linger_file(User *u); +int user_check_linger_file(const User *u); void user_elect_display(User *u); void user_update_last_session_timer(User *u);