diff --git a/lib/drmtest.c b/lib/drmtest.c index 02496c5d..f4a86005 100644 --- a/lib/drmtest.c +++ b/lib/drmtest.c @@ -1246,6 +1246,23 @@ void igt_stop_helper(struct igt_helper_process *proc) helper_process_count--; } +void igt_wait_helper(struct igt_helper_process *proc) +{ + int status; + + assert(proc->running); + + while (waitpid(proc->pid, &status, 0) == -1 && + errno == EINTR) + ; + igt_assert(WIFEXITED(status) && WEXITSTATUS(status) == 0); + + proc->running = false; + + helper_process_pids[proc->id] = -1; + helper_process_count--; +} + static void children_exit_handler(int sig) { int ret; diff --git a/lib/drmtest.h b/lib/drmtest.h index d42a6f77..f945a7eb 100644 --- a/lib/drmtest.h +++ b/lib/drmtest.h @@ -290,6 +290,7 @@ struct igt_helper_process { }; bool __igt_fork_helper(struct igt_helper_process *proc); void igt_stop_helper(struct igt_helper_process *proc); +void igt_wait_helper(struct igt_helper_process *proc); #define igt_fork_helper(proc) \ for (; __igt_fork_helper(proc); exit(0))