From 847bcb63b541e4fbbfa3dccfe3022745cbe9a06a Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Wed, 23 Sep 2015 22:18:22 -0500 Subject: Add xvfork() as a static inline and use it from various places. Note: vfork(), like fork(), can return -1 if too many processes, and we should notice and fail loudly. --- lib/lib.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'lib') diff --git a/lib/lib.h b/lib/lib.h index 2b49dc17..cbac3aa5 100644 --- a/lib/lib.h +++ b/lib/lib.h @@ -246,5 +246,17 @@ void mode_to_string(mode_t mode, char *buf); char *basename_r(char *name); void names_to_pid(char **names, int (*callback)(pid_t pid, char *name)); +// Returning from a function can modify a potentially shared stack, +// so this has to always inline. + +static inline pid_t xvfork(void) +{ + pid_t p = vfork(); + + if (p == -1) perror_exit("vfork"); + + return p; +} + // Functions in need of further review/cleanup #include "lib/pending.h" -- cgit v1.2.3