summaryrefslogtreecommitdiff
path: root/src/login/logind-action.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2013-11-27 02:38:06 +0100
committerLennart Poettering <lennart@poettering.net>2013-11-27 02:39:19 +0100
commit85a428c69465b047731b6abb5005f01824f1444e (patch)
tree0e893b3555f1afd9ae3b8b5af1de9259c5581e12 /src/login/logind-action.c
parentfbb634117d0b0ebd5b105e65b141e75ae9af7f8f (diff)
logind: log which process is delaying suspend and not closing locks
Diffstat (limited to 'src/login/logind-action.c')
-rw-r--r--src/login/logind-action.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/src/login/logind-action.c b/src/login/logind-action.c
index cb64df086c..7744addf69 100644
--- a/src/login/logind-action.c
+++ b/src/login/logind-action.c
@@ -58,6 +58,7 @@ int manager_handle_action(
_cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
InhibitWhat inhibit_operation;
+ Inhibitor *offending = NULL;
bool supported;
int r;
@@ -71,7 +72,7 @@ int manager_handle_action(
/* If the key handling is inhibited, don't do anything */
if (inhibit_key > 0) {
- if (manager_is_inhibited(m, inhibit_key, INHIBIT_BLOCK, NULL, true, false, 0)) {
+ if (manager_is_inhibited(m, inhibit_key, INHIBIT_BLOCK, NULL, true, false, 0, NULL)) {
log_debug("Refusing operation, %s is inhibited.", inhibit_what_to_string(inhibit_key));
return 0;
}
@@ -109,15 +110,26 @@ int manager_handle_action(
/* If the actual operation is inhibited, warn and fail */
if (!ignore_inhibited &&
- manager_is_inhibited(m, inhibit_operation, INHIBIT_BLOCK, NULL, false, false, 0)) {
+ manager_is_inhibited(m, inhibit_operation, INHIBIT_BLOCK, NULL, false, false, 0, &offending)) {
+ _cleanup_free_ char *comm = NULL, *u = NULL;
+
+ get_process_comm(offending->pid, &comm);
+ u = uid_to_name(offending->uid);
/* If this is just a recheck of the lid switch then don't warn about anything */
if (!is_edge) {
- log_debug("Refusing operation, %s is inhibited.", inhibit_what_to_string(inhibit_operation));
+ log_debug("Refusing operation, %s is inhibited by UID %lu/%s, PID %lu/%s.",
+ inhibit_what_to_string(inhibit_operation),
+ (unsigned long) offending->uid, strna(u),
+ (unsigned long) offending->pid, strna(comm));
return 0;
}
- log_error("Refusing operation, %s is inhibited.", inhibit_what_to_string(inhibit_operation));
+ log_error("Refusing operation, %s is inhibited by UID %lu/%s, PID %lu/%s.",
+ inhibit_what_to_string(inhibit_operation),
+ (unsigned long) offending->uid, strna(u),
+ (unsigned long) offending->pid, strna(comm));
+
warn_melody();
return -EPERM;
}