#include <stdlib.h>
#include <errno.h>
-#include <fcntl.h>
#include <setjmp.h>
#include <signal.h>
#include <sys/time.h>
-#include <sys/ioctl.h>
#include <sys/ptrace.h>
#include <sys/wait.h>
#include <asm/page.h>
{
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 */
.is_irq = 0 },
[ SIGILL ] { .handler = relay_signal,
.is_irq = 0 },
+ [ SIGWINCH ] { .handler = winch,
+ .is_irq = 1 },
[ SIGBUS ] { .handler = bus_handler,
.is_irq = 0 },
[ SIGSEGV] { .handler = segv_handler,
sig, &sc);
}
-extern int timer_irq_inited, missed_ticks[];
+extern int timer_irq_inited;
void alarm_handler(int sig, struct sigcontext sc)
{
if(!timer_irq_inited) return;
- missed_ticks[cpu()]++;
if(sig == SIGALRM)
switch_timers(0);
void do_longjmp(void *b, int val)
{
- jmp_buf *buf = b;
+ sigjmp_buf *buf = b;
- longjmp(*buf, val);
+ siglongjmp(*buf, val);
}
/*