diff options
author | Chris Larson <clarson@kergoth.com> | 2004-12-09 09:47:41 +0000 |
---|---|---|
committer | Chris Larson <clarson@kergoth.com> | 2004-12-09 09:47:41 +0000 |
commit | 2c5b8ec6d95cf68650265941530e5ce38c8dd6d9 (patch) | |
tree | bf879bea7ef8517ba8c3d1286ef300401d3d484c /linux-uml/linux-uml-2.6.7/EINTR_safety.patch | |
parent | 101e2f1623def0a355d20aacb8bd93810703e834 (diff) |
Merge oe-devel@oe-devel.bkbits.net:openembedded
into hyperion.kergoth.com:/home/kergoth/code/openembedded
2004/12/09 03:39:39-06:00 kergoth.com!kergoth
Break people's builds again.. this time moving the packages into a packages/ subdir to clean things up a bit.
BKrev: 41b81f3dvlp3rU7_8MUXLcI8LDdDoA
Diffstat (limited to 'linux-uml/linux-uml-2.6.7/EINTR_safety.patch')
-rw-r--r-- | linux-uml/linux-uml-2.6.7/EINTR_safety.patch | 456 |
1 files changed, 0 insertions, 456 deletions
diff --git a/linux-uml/linux-uml-2.6.7/EINTR_safety.patch b/linux-uml/linux-uml-2.6.7/EINTR_safety.patch deleted file mode 100644 index 8dd49b8690..0000000000 --- a/linux-uml/linux-uml-2.6.7/EINTR_safety.patch +++ /dev/null @@ -1,456 +0,0 @@ - - -On various places (mostly waitpid() calls) this patch makes sure -that if errno == EINTR on return, then the syscall is endlessly retried. -It also defines a simple generic way to do this. - -Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade_spam@yahoo.it> ---- - - uml-linux-2.6.7-paolo/arch/um/drivers/net_user.c | 3 +- - uml-linux-2.6.7-paolo/arch/um/drivers/slip_user.c | 6 +++-- - uml-linux-2.6.7-paolo/arch/um/drivers/slirp_user.c | 8 +++---- - uml-linux-2.6.7-paolo/arch/um/include/user_util.h | 1 - uml-linux-2.6.7-paolo/arch/um/kernel/frame.c | 8 ++++--- - uml-linux-2.6.7-paolo/arch/um/kernel/helper.c | 3 +- - uml-linux-2.6.7-paolo/arch/um/kernel/process.c | 11 +++++----- - uml-linux-2.6.7-paolo/arch/um/kernel/skas/exec_user.c | 6 +++-- - uml-linux-2.6.7-paolo/arch/um/kernel/skas/process.c | 6 ++--- - uml-linux-2.6.7-paolo/arch/um/kernel/trap_user.c | 9 +++++++- - uml-linux-2.6.7-paolo/arch/um/kernel/tt/exec_user.c | 9 ++++++-- - uml-linux-2.6.7-paolo/arch/um/kernel/tt/ptproxy/proxy.c | 4 +-- - uml-linux-2.6.7-paolo/arch/um/kernel/tt/tracer.c | 4 +-- - uml-linux-2.6.7-paolo/arch/um/kernel/user_util.c | 10 +++------ - uml-linux-2.6.7-paolo/arch/um/os-Linux/drivers/ethertap_user.c | 4 ++- - uml-linux-2.6.7-paolo/arch/um/os-Linux/drivers/tuntap_user.c | 3 +- - uml-linux-2.6.7-paolo/arch/um/os-Linux/process.c | 3 +- - 17 files changed, 61 insertions(+), 37 deletions(-) - -diff -puN arch/um/kernel/skas/process.c~EINTR_safety arch/um/kernel/skas/process.c ---- uml-linux-2.6.7/arch/um/kernel/skas/process.c~EINTR_safety 2004-06-29 21:03:04.749915272 +0200 -+++ uml-linux-2.6.7-paolo/arch/um/kernel/skas/process.c 2004-06-29 21:03:04.785909800 +0200 -@@ -81,7 +81,7 @@ static void handle_trap(int pid, union u - panic("handle_trap - continuing to end of syscall failed, " - "errno = %d\n", errno); - -- err = waitpid(pid, &status, WUNTRACED); -+ CATCH_EINTR(err = waitpid(pid, &status, WUNTRACED)); - if((err < 0) || !WIFSTOPPED(status) || (WSTOPSIG(status) != SIGTRAP)) - panic("handle_trap - failed to wait at end of syscall, " - "errno = %d, status = %d\n", errno, status); -@@ -121,7 +121,7 @@ void start_userspace(int cpu) - panic("start_userspace : clone failed, errno = %d", errno); - - do { -- n = waitpid(pid, &status, WUNTRACED); -+ CATCH_EINTR(n = waitpid(pid, &status, WUNTRACED)); - if(n < 0) - panic("start_userspace : wait failed, errno = %d", - errno); -@@ -154,7 +154,7 @@ void userspace(union uml_pt_regs *regs) - panic("userspace - PTRACE_SYSCALL failed, errno = %d\n", - errno); - while(1){ -- err = waitpid(pid, &status, WUNTRACED); -+ CATCH_EINTR(err = waitpid(pid, &status, WUNTRACED)); - if(err < 0) - panic("userspace - waitpid failed, errno = %d\n", - errno); -diff -puN arch/um/include/user_util.h~EINTR_safety arch/um/include/user_util.h ---- uml-linux-2.6.7/arch/um/include/user_util.h~EINTR_safety 2004-06-29 21:03:04.750915120 +0200 -+++ uml-linux-2.6.7-paolo/arch/um/include/user_util.h 2004-06-29 21:03:04.786909648 +0200 -@@ -92,6 +92,7 @@ extern void arch_init_thread(void); - extern int __raw(int fd, int complain, int now); - #define raw(fd, complain) __raw((fd), (complain), 1) - -+#define CATCH_EINTR(expr) while ( ((expr) < 0) && errno == EINTR) - #endif - - /* -diff -puN arch/um/kernel/user_util.c~EINTR_safety arch/um/kernel/user_util.c ---- uml-linux-2.6.7/arch/um/kernel/user_util.c~EINTR_safety 2004-06-29 21:03:04.751914968 +0200 -+++ uml-linux-2.6.7-paolo/arch/um/kernel/user_util.c 2004-06-29 21:03:04.786909648 +0200 -@@ -81,11 +81,10 @@ int wait_for_stop(int pid, int sig, int - int status, ret; - - while(1){ -- ret = waitpid(pid, &status, WUNTRACED); -+ CATCH_EINTR(ret = waitpid(pid, &status, WUNTRACED)); - if((ret < 0) || - !WIFSTOPPED(status) || (WSTOPSIG(status) != sig)){ - if(ret < 0){ -- if(errno == EINTR) continue; - printk("wait failed, errno = %d\n", - errno); - } -@@ -125,8 +124,7 @@ int __raw(int fd, int complain, int now) - int err; - int when; - -- while (((err = tcgetattr(fd, &tt)) < 0) && errno == EINTR) -- ; -+ CATCH_EINTR(err = tcgetattr(fd, &tt)); - - if (err < 0) { - if (complain) -@@ -141,8 +139,8 @@ int __raw(int fd, int complain, int now) - else - when = TCSADRAIN; - -- while (((err = tcsetattr(fd, when, &tt)) < 0) && errno == EINTR) -- ; -+ CATCH_EINTR(err = tcsetattr(fd, when, &tt)); -+ - if (err < 0) { - if (complain) - printk("tcsetattr failed, errno = %d\n", errno); -diff -puN arch/um/kernel/process.c~EINTR_safety arch/um/kernel/process.c ---- uml-linux-2.6.7/arch/um/kernel/process.c~EINTR_safety 2004-06-29 21:03:04.752914816 +0200 -+++ uml-linux-2.6.7-paolo/arch/um/kernel/process.c 2004-06-29 21:03:04.786909648 +0200 -@@ -125,7 +125,7 @@ int start_fork_tramp(void *thread_arg, u - /* Start the process and wait for it to kill itself */ - new_pid = clone(outer_tramp, (void *) sp, clone_flags, &arg); - if(new_pid < 0) return(-errno); -- while(((err = waitpid(new_pid, &status, 0)) < 0) && (errno == EINTR)) ; -+ CATCH_EINTR(err = waitpid(new_pid, &status, 0)); - if(err < 0) panic("Waiting for outer trampoline failed - errno = %d", - errno); - if(!WIFSIGNALED(status) || (WTERMSIG(status) != SIGKILL)) -@@ -171,7 +171,7 @@ static int start_ptraced_child(void **st - pid = clone(ptrace_child, (void *) sp, SIGCHLD, NULL); - if(pid < 0) - panic("check_ptrace : clone failed, errno = %d", errno); -- n = waitpid(pid, &status, WUNTRACED); -+ CATCH_EINTR(n = waitpid(pid, &status, WUNTRACED)); - if(n < 0) - panic("check_ptrace : wait failed, errno = %d", errno); - if(!WIFSTOPPED(status) || (WSTOPSIG(status) != SIGSTOP)) -@@ -188,7 +188,7 @@ static void stop_ptraced_child(int pid, - - if(ptrace(PTRACE_CONT, pid, 0, 0) < 0) - panic("check_ptrace : ptrace failed, errno = %d", errno); -- n = waitpid(pid, &status, 0); -+ CATCH_EINTR(n = waitpid(pid, &status, 0)); - if(!WIFEXITED(status) || (WEXITSTATUS(status) != exitcode)) - panic("check_ptrace : child exited with status 0x%x", status); - -@@ -224,7 +224,7 @@ void __init check_ptrace(void) - if(ptrace(PTRACE_SYSCALL, pid, 0, 0) < 0) - panic("check_ptrace : ptrace failed, errno = %d", - errno); -- n = waitpid(pid, &status, WUNTRACED); -+ CATCH_EINTR(n = waitpid(pid, &status, WUNTRACED)); - if(n < 0) - panic("check_ptrace : wait failed, errno = %d", errno); - if(!WIFSTOPPED(status) || (WSTOPSIG(status) != SIGTRAP)) -@@ -251,7 +251,8 @@ void __init check_ptrace(void) - if(ptrace(PTRACE_SYSEMU, pid, 0, 0) >= 0) { - struct user_regs_struct regs; - -- if (waitpid(pid, &status, WUNTRACED) < 0) -+ CATCH_EINTR(n = waitpid(pid, &status, WUNTRACED)); -+ if (n < 0) - panic("check_ptrace : wait failed, errno = %d", errno); - if(!WIFSTOPPED(status) || (WSTOPSIG(status) != SIGTRAP)) - panic("check_ptrace : expected SIGTRAP, " -diff -puN arch/um/kernel/frame.c~EINTR_safety arch/um/kernel/frame.c ---- uml-linux-2.6.7/arch/um/kernel/frame.c~EINTR_safety 2004-06-29 21:03:04.754914512 +0200 -+++ uml-linux-2.6.7-paolo/arch/um/kernel/frame.c 2004-06-29 21:03:04.787909496 +0200 -@@ -21,6 +21,7 @@ - #include "sysdep/sigcontext.h" - #include "frame_user.h" - #include "kern_util.h" -+#include "user_util.h" - #include "ptrace_user.h" - #include "os.h" - -@@ -40,7 +41,7 @@ static int capture_stack(int (*child)(vo - /* Wait for it to stop itself and continue it with a SIGUSR1 to force - * it into the signal handler. - */ -- n = waitpid(pid, &status, WUNTRACED); -+ CATCH_EINTR(n = waitpid(pid, &status, WUNTRACED)); - if(n < 0){ - printf("capture_stack : waitpid failed - errno = %d\n", errno); - exit(1); -@@ -60,7 +61,7 @@ static int capture_stack(int (*child)(vo - * At this point, the handler has stuffed the addresses of - * sig, sc, and SA_RESTORER in raw. - */ -- n = waitpid(pid, &status, WUNTRACED); -+ CATCH_EINTR(n = waitpid(pid, &status, WUNTRACED)); - if(n < 0){ - printf("capture_stack : waitpid failed - errno = %d\n", errno); - exit(1); -@@ -82,7 +83,8 @@ static int capture_stack(int (*child)(vo - errno); - exit(1); - } -- if(waitpid(pid, &status, 0) < 0){ -+ CATCH_EINTR(n = waitpid(pid, &status, 0)); -+ if(n < 0){ - printf("capture_stack : waitpid failed - errno = %d\n", errno); - exit(1); - } -diff -puN arch/um/drivers/net_user.c~EINTR_safety arch/um/drivers/net_user.c ---- uml-linux-2.6.7/arch/um/drivers/net_user.c~EINTR_safety 2004-06-29 21:03:04.755914360 +0200 -+++ uml-linux-2.6.7-paolo/arch/um/drivers/net_user.c 2004-06-29 21:03:04.787909496 +0200 -@@ -175,7 +175,8 @@ static int change_tramp(char **argv, cha - - os_close_file(fds[1]); - read_output(fds[0], output, output_len); -- waitpid(pid, NULL, 0); -+ -+ CATCH_EINTR(err = waitpid(pid, NULL, 0)); - return(pid); - } - -diff -puN arch/um/drivers/slip_user.c~EINTR_safety arch/um/drivers/slip_user.c ---- uml-linux-2.6.7/arch/um/drivers/slip_user.c~EINTR_safety 2004-06-29 21:03:04.756914208 +0200 -+++ uml-linux-2.6.7-paolo/arch/um/drivers/slip_user.c 2004-06-29 21:03:04.787909496 +0200 -@@ -4,7 +4,7 @@ - #include <stddef.h> - #include <sched.h> - #include <string.h> --#include <sys/errno.h> -+#include <errno.h> - #include <sys/termios.h> - #include <sys/wait.h> - #include <sys/signal.h> -@@ -100,7 +100,9 @@ static int slip_tramp(char **argv, int f - printk("%s", output); - kfree(output); - } -- if(waitpid(pid, &status, 0) < 0) err = errno; -+ CATCH_EINTR(err = waitpid(pid, &status, 0)); -+ if(err < 0) -+ err = errno; - else if(!WIFEXITED(status) || (WEXITSTATUS(status) != 0)){ - printk("'%s' didn't exit with status 0\n", argv[0]); - err = -EINVAL; -diff -puN arch/um/drivers/slirp_user.c~EINTR_safety arch/um/drivers/slirp_user.c ---- uml-linux-2.6.7/arch/um/drivers/slirp_user.c~EINTR_safety 2004-06-29 21:03:04.772911776 +0200 -+++ uml-linux-2.6.7-paolo/arch/um/drivers/slirp_user.c 2004-06-29 21:03:04.787909496 +0200 -@@ -4,7 +4,7 @@ - #include <stddef.h> - #include <sched.h> - #include <string.h> --#include <sys/errno.h> -+#include <errno.h> - #include <sys/wait.h> - #include <sys/signal.h> - #include "user_util.h" -@@ -113,13 +113,13 @@ static void slirp_close(int fd, void *da - } - #endif - -- err = waitpid(pri->pid, &status, WNOHANG); -- if(err<0) { -+ CATCH_EINTR(err = waitpid(pri->pid, &status, WNOHANG)); -+ if(err < 0) { - printk("slirp_close: waitpid returned %d\n", errno); - return; - } - -- if(err==0) { -+ if(err == 0) { - printk("slirp_close: process %d has not exited\n"); - return; - } -diff -puN arch/um/kernel/helper.c~EINTR_safety arch/um/kernel/helper.c ---- uml-linux-2.6.7/arch/um/kernel/helper.c~EINTR_safety 2004-06-29 21:03:04.774911472 +0200 -+++ uml-linux-2.6.7-paolo/arch/um/kernel/helper.c 2004-06-29 21:03:04.788909344 +0200 -@@ -12,6 +12,7 @@ - #include <sys/wait.h> - #include "user.h" - #include "kern_util.h" -+#include "user_util.h" - #include "os.h" - - struct helper_data { -@@ -96,7 +97,7 @@ int run_helper(void (*pre_exec)(void *), - goto out_kill; - } - else if(n != 0){ -- waitpid(pid, NULL, 0); -+ CATCH_EINTR(n = waitpid(pid, NULL, 0)); - pid = -errno; - } - -diff -puN arch/um/kernel/skas/exec_user.c~EINTR_safety arch/um/kernel/skas/exec_user.c ---- uml-linux-2.6.7/arch/um/kernel/skas/exec_user.c~EINTR_safety 2004-06-29 21:03:04.775911320 +0200 -+++ uml-linux-2.6.7-paolo/arch/um/kernel/skas/exec_user.c 2004-06-29 21:03:04.788909344 +0200 -@@ -11,6 +11,7 @@ - #include <sys/ptrace.h> - #include "user.h" - #include "kern_util.h" -+#include "user_util.h" - #include "os.h" - #include "time_user.h" - -@@ -26,7 +27,7 @@ static int user_thread_tramp(void *arg) - - int user_thread(unsigned long stack, int flags) - { -- int pid, status; -+ int pid, status, err; - - pid = clone(user_thread_tramp, (void *) stack_sp(stack), - flags | CLONE_FILES | SIGCHLD, NULL); -@@ -35,7 +36,8 @@ int user_thread(unsigned long stack, int - return(pid); - } - -- if(waitpid(pid, &status, WUNTRACED) < 0){ -+ CATCH_EINTR(err = waitpid(pid, &status, WUNTRACED)); -+ if(err < 0){ - printk("user_thread - waitpid failed, errno = %d\n", errno); - return(-errno); - } -diff -puN arch/um/kernel/trap_user.c~EINTR_safety arch/um/kernel/trap_user.c ---- uml-linux-2.6.7/arch/um/kernel/trap_user.c~EINTR_safety 2004-06-29 21:03:04.776911168 +0200 -+++ uml-linux-2.6.7-paolo/arch/um/kernel/trap_user.c 2004-06-29 21:03:04.788909344 +0200 -@@ -32,7 +32,14 @@ void kill_child_dead(int pid) - { - kill(pid, SIGKILL); - kill(pid, SIGCONT); -- while(waitpid(pid, NULL, 0) > 0) kill(pid, SIGCONT); -+ do { -+ int n; -+ CATCH_EINTR(n = waitpid(pid, NULL, 0)); -+ if (n > 0) -+ kill(pid, SIGCONT); -+ else -+ break; -+ } while(1); - } - - /* Unlocked - don't care if this is a bit off */ -diff -puN arch/um/kernel/tt/exec_user.c~EINTR_safety arch/um/kernel/tt/exec_user.c ---- uml-linux-2.6.7/arch/um/kernel/tt/exec_user.c~EINTR_safety 2004-06-29 21:03:04.777911016 +0200 -+++ uml-linux-2.6.7-paolo/arch/um/kernel/tt/exec_user.c 2004-06-29 21:03:04.788909344 +0200 -@@ -19,13 +19,18 @@ - void do_exec(int old_pid, int new_pid) - { - unsigned long regs[FRAME_SIZE]; -+ int err; - - if((ptrace(PTRACE_ATTACH, new_pid, 0, 0) < 0) || -- (ptrace(PTRACE_CONT, new_pid, 0, 0) < 0) || -- (waitpid(new_pid, 0, WUNTRACED) < 0)) -+ (ptrace(PTRACE_CONT, new_pid, 0, 0) < 0)) - tracer_panic("do_exec failed to attach proc - errno = %d", - errno); - -+ CATCH_EINTR(err = waitpid(new_pid, 0, WUNTRACED)); -+ if (err < 0) -+ tracer_panic("do_exec failed to attach proc in waitpid - errno = %d", -+ errno); -+ - if(ptrace_getregs(old_pid, regs) < 0) - tracer_panic("do_exec failed to get registers - errno = %d", - errno); -diff -puN arch/um/kernel/tt/ptproxy/proxy.c~EINTR_safety arch/um/kernel/tt/ptproxy/proxy.c ---- uml-linux-2.6.7/arch/um/kernel/tt/ptproxy/proxy.c~EINTR_safety 2004-06-29 21:03:04.778910864 +0200 -+++ uml-linux-2.6.7-paolo/arch/um/kernel/tt/ptproxy/proxy.c 2004-06-29 21:03:04.789909192 +0200 -@@ -272,7 +272,7 @@ void fake_child_exit(void) - - child_proxy(1, W_EXITCODE(0, 0)); - while(debugger.waiting == 1){ -- pid = waitpid(debugger.pid, &status, WUNTRACED); -+ CATCH_EINTR(pid = waitpid(debugger.pid, &status, WUNTRACED)); - if(pid != debugger.pid){ - printk("fake_child_exit - waitpid failed, " - "errno = %d\n", errno); -@@ -280,7 +280,7 @@ void fake_child_exit(void) - } - debugger_proxy(status, debugger.pid); - } -- pid = waitpid(debugger.pid, &status, WUNTRACED); -+ CATCH_EINTR(pid = waitpid(debugger.pid, &status, WUNTRACED)); - if(pid != debugger.pid){ - printk("fake_child_exit - waitpid failed, " - "errno = %d\n", errno); -diff -puN arch/um/kernel/tt/tracer.c~EINTR_safety arch/um/kernel/tt/tracer.c ---- uml-linux-2.6.7/arch/um/kernel/tt/tracer.c~EINTR_safety 2004-06-29 21:03:04.779910712 +0200 -+++ uml-linux-2.6.7-paolo/arch/um/kernel/tt/tracer.c 2004-06-29 21:03:04.789909192 +0200 -@@ -192,7 +192,7 @@ int tracer(int (*init_proc)(void *), voi - printf("tracing thread pid = %d\n", tracing_pid); - - pid = clone(signal_tramp, sp, CLONE_FILES | SIGCHLD, init_proc); -- n = waitpid(pid, &status, WUNTRACED); -+ CATCH_EINTR(n = waitpid(pid, &status, WUNTRACED)); - if(n < 0){ - printf("waitpid on idle thread failed, errno = %d\n", errno); - exit(1); -@@ -233,7 +233,7 @@ int tracer(int (*init_proc)(void *), voi - } - set_cmdline("(tracing thread)"); - while(1){ -- pid = waitpid(-1, &status, WUNTRACED); -+ CATCH_EINTR(pid = waitpid(-1, &status, WUNTRACED)); - if(pid <= 0){ - if(errno != ECHILD){ - printf("wait failed - errno = %d\n", errno); -diff -puN arch/um/os-Linux/drivers/ethertap_user.c~EINTR_safety arch/um/os-Linux/drivers/ethertap_user.c ---- uml-linux-2.6.7/arch/um/os-Linux/drivers/ethertap_user.c~EINTR_safety 2004-06-29 21:03:04.780910560 +0200 -+++ uml-linux-2.6.7-paolo/arch/um/os-Linux/drivers/ethertap_user.c 2004-06-29 21:03:04.789909192 +0200 -@@ -16,6 +16,7 @@ - #include <net/if.h> - #include "user.h" - #include "kern_util.h" -+#include "user_util.h" - #include "net_user.h" - #include "etap.h" - #include "helper.h" -@@ -125,7 +126,8 @@ static int etap_tramp(char *dev, char *g - if(c != 1){ - printk("etap_tramp : uml_net failed\n"); - err = -EINVAL; -- if(waitpid(pid, &status, 0) < 0) -+ CATCH_EINTR(n = waitpid(pid, &status, 0)); -+ if(n < 0) - err = -errno; - else if(!WIFEXITED(status) || (WEXITSTATUS(status) != 1)) - printk("uml_net didn't exit with status 1\n"); -diff -puN arch/um/os-Linux/drivers/tuntap_user.c~EINTR_safety arch/um/os-Linux/drivers/tuntap_user.c ---- uml-linux-2.6.7/arch/um/os-Linux/drivers/tuntap_user.c~EINTR_safety 2004-06-29 21:03:04.782910256 +0200 -+++ uml-linux-2.6.7-paolo/arch/um/os-Linux/drivers/tuntap_user.c 2004-06-29 21:03:04.789909192 +0200 -@@ -18,6 +18,7 @@ - #include "net_user.h" - #include "tuntap.h" - #include "kern_util.h" -+#include "user_util.h" - #include "user.h" - #include "helper.h" - #include "os.h" -@@ -108,7 +109,7 @@ static int tuntap_open_tramp(char *gate, - errno); - return(-errno); - } -- waitpid(pid, NULL, 0); -+ CATCH_EINTR(waitpid(pid, NULL, 0)); - - cmsg = CMSG_FIRSTHDR(&msg); - if(cmsg == NULL){ -diff -puN arch/um/os-Linux/process.c~EINTR_safety arch/um/os-Linux/process.c ---- uml-linux-2.6.7/arch/um/os-Linux/process.c~EINTR_safety 2004-06-29 21:03:04.783910104 +0200 -+++ uml-linux-2.6.7-paolo/arch/um/os-Linux/process.c 2004-06-29 21:03:04.790909040 +0200 -@@ -12,6 +12,7 @@ - #include <sys/wait.h> - #include "os.h" - #include "user.h" -+#include "user_util.h" - - #define ARBITRARY_ADDR -1 - #define FAILURE_PID -1 -@@ -87,7 +88,7 @@ void os_kill_process(int pid, int reap_c - { - kill(pid, SIGKILL); - if(reap_child) -- waitpid(pid, NULL, 0); -+ CATCH_EINTR(waitpid(pid, NULL, 0)); - - } - -_ |