summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2016-04-29 19:23:23 +0200
committerLennart Poettering <lennart@poettering.net>2016-05-02 11:15:30 +0200
commit89c9030d319e118fa324fa5a1302ba53180b05b6 (patch)
tree3020eb7a0d26d5f8a8cfad092102de3f44b1dc28
parent5659958529d16f082a24d0c5b68699570b3eace3 (diff)
util: rework sigkill_wait() to not require pid_t pointer
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.
-rw-r--r--src/basic/process-util.c12
-rw-r--r--src/basic/process-util.h4
-rw-r--r--src/import/pull-common.c2
-rw-r--r--src/machine/image-dbus.c2
-rw-r--r--src/machine/operation.c2
5 files changed, 14 insertions, 8 deletions
diff --git a/src/basic/process-util.c b/src/basic/process-util.c
index f2cea01979..4a7367cc92 100644
--- a/src/basic/process-util.c
+++ b/src/basic/process-util.c
@@ -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) {
diff --git a/src/basic/process-util.h b/src/basic/process-util.h
index ffd4bcb0ff..9f75088796 100644
--- a/src/basic/process-util.h
+++ b/src/basic/process-util.h
@@ -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);
diff --git a/src/import/pull-common.c b/src/import/pull-common.c
index d301d4d79e..dc4e4667a9 100644
--- a/src/import/pull-common.c
+++ b/src/import/pull-common.c
@@ -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;
diff --git a/src/machine/image-dbus.c b/src/machine/image-dbus.c
index ca38f61dd3..db0ed03b69 100644
--- a/src/machine/image-dbus.c
+++ b/src/machine/image-dbus.c
@@ -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;
}
diff --git a/src/machine/operation.c b/src/machine/operation.c
index 53e996b48f..e8564c29f7 100644
--- a/src/machine/operation.c
+++ b/src/machine/operation.c
@@ -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);