]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
homed: don't wait indefinitely for workers on exit
authorLennart Poettering <lennart@poettering.net>
Mon, 5 Sep 2022 13:14:11 +0000 (15:14 +0200)
committerLennart Poettering <lennart@poettering.net>
Mon, 5 Sep 2022 13:20:48 +0000 (15:20 +0200)
Let's put some time-limit on it.

Fixes: #22901
src/home/homed-home.c

index 8a389f721638853d677dc31f3d25f740686e767a..2b7c18d32f420eb0cf0f69ec9f1422dae91260f8 100644 (file)
@@ -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;