diff options
author | Lennart Poettering <lennart@poettering.net> | 2018-08-06 19:00:49 +0200 |
---|---|---|
committer | Sven Eden <sven.eden@prydeworx.com> | 2018-10-29 10:18:34 +0100 |
commit | d1f2956082e945c96fb74ec19a3302763d209325 (patch) | |
tree | 8fbeba61983a85e93183f0ed1fc249dedee03a14 /src/login/logind-user.c | |
parent | 882fa3df6c9720f0eb32e54ec812d38e9cc683ef (diff) |
logind: make unit/job active checking more debuggable
Let's log the error messages if we get any at debug level.
(cherry picked from commit bd26aee1f6bea13fe25b3feb2a5e9cd1be522e7e)
Diffstat (limited to 'src/login/logind-user.c')
-rw-r--r-- | src/login/logind-user.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/login/logind-user.c b/src/login/logind-user.c index 9468d493d..12b8bf63e 100644 --- a/src/login/logind-user.c +++ b/src/login/logind-user.c @@ -579,6 +579,8 @@ int user_check_linger_file(User *u) { } bool user_may_gc(User *u, bool drop_not_started) { + int r; + assert(u); if (drop_not_started && !u->started) @@ -591,12 +593,20 @@ bool user_may_gc(User *u, bool drop_not_started) { return false; #if 0 /// elogind neither supports service nor slice jobs - if (u->slice_job && manager_job_is_active(u->manager, u->slice_job)) - return false; + /* Check if our job is still pending */ + if (u->service_job) { + _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL; - if (u->service_job && manager_job_is_active(u->manager, u->service_job)) - return false; #endif // 0 + r = manager_job_is_active(u->manager, u->service_job, &error); + if (r < 0) + log_debug_errno(r, "Failed to determine whether job '%s' is pending, ignoring: %s", u->service_job, bus_error_message(&error, r)); + if (r != 0) + return false; + } + + /* Note that we don't care if the three units we manage for each user object are up or not, as we are managing + * their state rather than tracking it. */ return true; } |