summaryrefslogtreecommitdiff
path: root/src/home
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2022-09-05 15:14:11 +0200
committerLennart Poettering <lennart@poettering.net>2022-09-05 15:20:48 +0200
commitf8f621821a30b5b7e6c69dfb770e1c4cbc3db715 (patch)
tree419999128aa82d53e6972f4f621df325be948c98 /src/home
parentb8c0f58c19cd96980354691cd06d9699ce1b65d6 (diff)
downloadsystemd-f8f621821a30b5b7e6c69dfb770e1c4cbc3db715.tar.gz
homed: don't wait indefinitely for workers on exit
Let's put some time-limit on it. Fixes: #22901
Diffstat (limited to 'src/home')
-rw-r--r--src/home/homed-home.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/home/homed-home.c b/src/home/homed-home.c
index 8a389f7216..2b7c18d32f 100644
--- a/src/home/homed-home.c
+++ b/src/home/homed-home.c
@@ -3149,13 +3149,21 @@ int home_set_current_message(Home *h, sd_bus_message *m) {
}
int home_wait_for_worker(Home *h) {
+ int r;
+
assert(h);
if (h->worker_pid <= 0)
return 0;
log_info("Worker process for home %s is still running while exiting. Waiting for it to finish.", h->user_name);
- (void) wait_for_terminate(h->worker_pid, NULL);
+
+ r = wait_for_terminate_with_timeout(h->worker_pid, 30 * USEC_PER_SEC);
+ if (r == -ETIMEDOUT)
+ log_warning_errno(r, "Waiting for worker process for home %s timed out. Ignoring.", h->user_name);
+ else
+ log_warning_errno(r, "Failed to wait for worker process for home %s. Ignoring.", h->user_name);
+
(void) hashmap_remove_value(h->manager->homes_by_worker_pid, PID_TO_PTR(h->worker_pid), h);
h->worker_pid = 0;
return 1;