lib: Add SAFE_WAIT() and SAFE_WAITPID()
Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
diff --git a/include/safe_macros.h b/include/safe_macros.h
index 25846f4..b240fd6 100644
--- a/include/safe_macros.h
+++ b/include/safe_macros.h
@@ -216,5 +216,15 @@
#define SAFE_FCHMOD(cleanup_fn, fd, mode) \
safe_fchmod(__FILE__, __LINE__, (cleanup_fn), (fd), (mode))
+pid_t safe_wait(const char *file, const int lineno, void (cleanup_fn)(void),
+ int *status);
+#define SAFE_WAIT(cleanup_fn, status) \
+ safe_wait(__FILE__, __LINE__, (cleanup_fn), (status))
+
+pid_t safe_waitpid(const char *file, const int lineno, void (cleanup_fn)(void),
+ pid_t pid, int *status, int opts);
+#define SAFE_WAITPID(cleanup_fn, pid, status, opts) \
+ safe_waitpid(__FILE__, __LINE__, (cleanup_fn), (pid), (status), (opts))
+
#endif /* __SAFE_MACROS_H__ */
#endif /* __TEST_H__ */
diff --git a/lib/safe_macros.c b/lib/safe_macros.c
index 0d805e9..fbee716 100644
--- a/lib/safe_macros.c
+++ b/lib/safe_macros.c
@@ -2,6 +2,7 @@
#include <sys/mman.h>
#include <sys/resource.h>
#include <sys/stat.h>
+#include <sys/wait.h>
#include <errno.h>
#include <fcntl.h>
#include <libgen.h>
@@ -613,3 +614,33 @@
return rval;
}
+
+pid_t safe_wait(const char *file, const int lineno, void (cleanup_fn)(void),
+ int *status)
+{
+ pid_t rval;
+
+ rval = wait(status);
+ if (rval == -1) {
+ tst_brkm(TBROK | TERRNO, cleanup_fn,
+ "%s:%d: wait(%p) failed",
+ file, lineno, status);
+ }
+
+ return rval;
+}
+
+pid_t safe_waitpid(const char *file, const int lineno, void (cleanup_fn)(void),
+ pid_t pid, int *status, int opts)
+{
+ pid_t rval;
+
+ rval = waitpid(pid, status, opts);
+ if (rval == -1) {
+ tst_brkm(TBROK | TERRNO, cleanup_fn,
+ "%s:%d: waitpid(%d,%p,%d) failed",
+ file, lineno, pid, status, opts);
+ }
+
+ return rval;
+}