util: rework sigkill_wait() to not require pid_t pointer
authorLennart Poettering <lennart@poettering.net>
Fri, 29 Apr 2016 17:23:23 +0000 (19:23 +0200)
committerLennart Poettering <lennart@poettering.net>
Mon, 2 May 2016 09:15:30 +0000 (11:15 +0200)
Let's make sigkill_wait() take a normal pid_t, and add sigkill_waitp() that
takes a pointer (which is useful for usage in _cleanup_), following the usual
logic we have for this.

src/basic/process-util.c
src/basic/process-util.h
src/import/pull-common.c
src/machine/image-dbus.c
src/machine/operation.c

index f2cea01..4a7367c 100644 (file)
@@ -528,14 +528,20 @@ int wait_for_terminate_and_warn(const char *name, pid_t pid, bool check_exit_cod
         return -EPROTO;
 }
 
-void sigkill_wait(pid_t *pid) {
+void sigkill_wait(pid_t pid) {
+        assert(pid > 1);
+
+        if (kill(pid, SIGKILL) > 0)
+                (void) wait_for_terminate(pid, NULL);
+}
+
+void sigkill_waitp(pid_t *pid) {
         if (!pid)
                 return;
         if (*pid <= 1)
                 return;
 
-        if (kill(*pid, SIGKILL) > 0)
-                (void) wait_for_terminate(*pid, NULL);
+        sigkill_wait(*pid);
 }
 
 int kill_and_sigcont(pid_t pid, int sig) {
index ffd4bcb..9f75088 100644 (file)
@@ -58,8 +58,8 @@ int get_process_ppid(pid_t pid, pid_t *ppid);
 int wait_for_terminate(pid_t pid, siginfo_t *status);
 int wait_for_terminate_and_warn(const char *name, pid_t pid, bool check_exit_code);
 
-void sigkill_wait(pid_t *pid);
-#define _cleanup_sigkill_wait_ _cleanup_(sigkill_wait)
+void sigkill_wait(pid_t pid);
+void sigkill_waitp(pid_t *pid);
 
 int kill_and_sigcont(pid_t pid, int sig);
 
index d301d4d..dc4e466 100644 (file)
@@ -330,7 +330,7 @@ int pull_verify(PullJob *main_job,
         _cleanup_close_ int sig_file = -1;
         const char *p, *line;
         char sig_file_path[] = "/tmp/sigXXXXXX", gpg_home[] = "/tmp/gpghomeXXXXXX";
-        _cleanup_sigkill_wait_ pid_t pid = 0;
+        _cleanup_(sigkill_waitp) pid_t pid = 0;
         bool gpg_home_created = false;
         int r;
 
index ca38f61..db0ed03 100644 (file)
@@ -166,7 +166,7 @@ int bus_image_method_clone(
 
         r = operation_new(m, child, message, errno_pipe_fd[0]);
         if (r < 0) {
-                (void) sigkill_wait(&child);
+                (void) sigkill_wait(child);
                 return r;
         }
 
index 53e996b..e8564c2 100644 (file)
@@ -104,7 +104,7 @@ Operation *operation_free(Operation *o) {
         safe_close(o->errno_fd);
 
         if (o->pid > 1)
-                (void) sigkill_wait(&o->pid);
+                (void) sigkill_wait(o->pid);
 
         sd_bus_message_unref(o->message);