tree-wide: Migrate to pidref_safe_fork()
Let's migrate all remaining callers of safe_fork() to pidref_safe_fork() and get rid of safe_fork().
This commit is contained in:
committed by
DaanDeMeyer
parent
e6703a9aa4
commit
52ecf376fa
+23
-21
@@ -17,6 +17,7 @@
|
||||
#include "cpu-set-util.h"
|
||||
#include "dropin.h"
|
||||
#include "errno-list.h"
|
||||
#include "event-util.h"
|
||||
#include "extract-word.h"
|
||||
#include "fd-util.h"
|
||||
#include "fileio.h"
|
||||
@@ -671,11 +672,9 @@ reenable:
|
||||
}
|
||||
|
||||
static int on_spawn_timeout(sd_event_source *s, uint64_t usec, void *userdata) {
|
||||
pid_t *pid = userdata;
|
||||
PidRef *pidref = ASSERT_PTR(userdata);
|
||||
|
||||
ASSERT_NOT_NULL(pid);
|
||||
|
||||
(void) kill(*pid, SIGKILL);
|
||||
(void) pidref_kill(pidref, SIGKILL);
|
||||
|
||||
return 1;
|
||||
}
|
||||
@@ -700,7 +699,6 @@ static int find_libraries(const char *exec, char ***ret) {
|
||||
_cleanup_close_pair_ int outpipe[2] = EBADF_PAIR, errpipe[2] = EBADF_PAIR;
|
||||
_cleanup_strv_free_ char **libraries = NULL;
|
||||
_cleanup_free_ char *result = NULL;
|
||||
pid_t pid;
|
||||
int r;
|
||||
|
||||
ASSERT_NOT_NULL(exec);
|
||||
@@ -709,10 +707,13 @@ static int find_libraries(const char *exec, char ***ret) {
|
||||
ASSERT_OK_ERRNO(pipe2(outpipe, O_NONBLOCK|O_CLOEXEC));
|
||||
ASSERT_OK_ERRNO(pipe2(errpipe, O_NONBLOCK|O_CLOEXEC));
|
||||
|
||||
r = safe_fork_full("(spawn-ldd)",
|
||||
(int[]) { -EBADF, outpipe[1], errpipe[1] },
|
||||
NULL, 0,
|
||||
FORK_RESET_SIGNALS|FORK_CLOSE_ALL_FDS|FORK_DEATHSIG_SIGTERM|FORK_REARRANGE_STDIO|FORK_LOG, &pid);
|
||||
_cleanup_(pidref_done) PidRef pidref = PIDREF_NULL;
|
||||
r = pidref_safe_fork_full(
|
||||
"(spawn-ldd)",
|
||||
(int[]) { -EBADF, outpipe[1], errpipe[1] },
|
||||
NULL, 0,
|
||||
FORK_RESET_SIGNALS|FORK_CLOSE_ALL_FDS|FORK_DEATHSIG_SIGTERM|FORK_REARRANGE_STDIO|FORK_LOG,
|
||||
&pidref);
|
||||
ASSERT_OK(r);
|
||||
if (r == 0) {
|
||||
execlp("ldd", "ldd", exec, NULL);
|
||||
@@ -725,12 +726,12 @@ static int find_libraries(const char *exec, char ***ret) {
|
||||
ASSERT_OK(sd_event_new(&e));
|
||||
|
||||
ASSERT_OK(sd_event_add_time_relative(e, NULL, CLOCK_MONOTONIC,
|
||||
10 * USEC_PER_SEC, USEC_PER_SEC, on_spawn_timeout, &pid));
|
||||
10 * USEC_PER_SEC, USEC_PER_SEC, on_spawn_timeout, &pidref));
|
||||
ASSERT_OK(sd_event_add_io(e, &stdout_source, outpipe[0], EPOLLIN, on_spawn_io, &result));
|
||||
ASSERT_OK(sd_event_source_set_enabled(stdout_source, SD_EVENT_ONESHOT));
|
||||
ASSERT_OK(sd_event_add_io(e, &stderr_source, errpipe[0], EPOLLIN, on_spawn_io, NULL));
|
||||
ASSERT_OK(sd_event_source_set_enabled(stderr_source, SD_EVENT_ONESHOT));
|
||||
ASSERT_OK(sd_event_add_child(e, &sigchld_source, pid, WEXITED, on_spawn_exit, NULL));
|
||||
ASSERT_OK(event_add_child_pidref(e, &sigchld_source, &pidref, WEXITED, on_spawn_exit, NULL));
|
||||
/* Child exit should be processed after IO is complete */
|
||||
ASSERT_OK(sd_event_source_set_priority(sigchld_source, SD_EVENT_PRIORITY_NORMAL + 1));
|
||||
|
||||
@@ -1464,16 +1465,17 @@ static void run_tests(RuntimeScope scope, char **patterns) {
|
||||
static int prepare_ns(const char *process_name) {
|
||||
int r;
|
||||
|
||||
r = safe_fork(process_name,
|
||||
FORK_RESET_SIGNALS |
|
||||
FORK_CLOSE_ALL_FDS |
|
||||
FORK_DEATHSIG_SIGTERM |
|
||||
FORK_WAIT |
|
||||
FORK_REOPEN_LOG |
|
||||
FORK_LOG |
|
||||
FORK_NEW_MOUNTNS |
|
||||
FORK_MOUNTNS_SLAVE,
|
||||
NULL);
|
||||
r = pidref_safe_fork(
|
||||
process_name,
|
||||
FORK_RESET_SIGNALS|
|
||||
FORK_CLOSE_ALL_FDS|
|
||||
FORK_DEATHSIG_SIGTERM|
|
||||
FORK_WAIT|
|
||||
FORK_REOPEN_LOG|
|
||||
FORK_LOG|
|
||||
FORK_NEW_MOUNTNS|
|
||||
FORK_MOUNTNS_SLAVE,
|
||||
NULL);
|
||||
ASSERT_OK(r);
|
||||
if (r == 0) {
|
||||
_cleanup_free_ char *unit_dir = NULL, *build_dir = NULL, *build_dir_mount = NULL;
|
||||
|
||||
Reference in New Issue
Block a user