1 1.1 gmcgarry #include <stdio.h> 2 1.1 gmcgarry #include <signal.h> 3 1.1 gmcgarry #include <unistd.h> 4 1.1 gmcgarry #include <sys/ras.h> 5 1.1 gmcgarry #include <sys/time.h> 6 1.1 gmcgarry #include <sys/wait.h> 7 1.1 gmcgarry 8 1.1 gmcgarry #define COUNT 10 9 1.1 gmcgarry 10 1.1 gmcgarry __volatile int handled = 0; 11 1.1 gmcgarry __volatile int count = 0; 12 1.1 gmcgarry struct itimerval itv; 13 1.1 gmcgarry 14 1.1 gmcgarry void handler(int); 15 1.1 gmcgarry 16 1.1 gmcgarry void 17 1.1 gmcgarry handler(int sig) 18 1.1 gmcgarry { 19 1.1 gmcgarry 20 1.1 gmcgarry handled++; 21 1.1 gmcgarry } 22 1.1 gmcgarry 23 1.1 gmcgarry int 24 1.1 gmcgarry main(int argc, char *argv[]) 25 1.1 gmcgarry { 26 1.1 gmcgarry int rv; 27 1.1 gmcgarry char *const args[] = { argv[0], "1", NULL }; 28 1.1 gmcgarry 29 1.1 gmcgarry signal(SIGVTALRM, handler); 30 1.1 gmcgarry 31 1.1 gmcgarry itv.it_interval.tv_sec = 0; 32 1.1 gmcgarry itv.it_interval.tv_usec = 0; 33 1.1 gmcgarry itv.it_value.tv_sec = 10; 34 1.1 gmcgarry itv.it_value.tv_usec = 0; 35 1.1 gmcgarry setitimer(ITIMER_VIRTUAL, &itv, NULL); 36 1.1 gmcgarry 37 1.1 gmcgarry if (argc != 2) { 38 1.1 gmcgarry if (rasctl((caddr_t)&&start, (caddr_t)&&end - (caddr_t)&&start, 39 1.1 gmcgarry RAS_INSTALL) < 0) 40 1.1 gmcgarry return (1); 41 1.1 gmcgarry if (fork() != 0) { 42 1.1 gmcgarry wait(&rv); 43 1.1 gmcgarry return (rv == 0); 44 1.1 gmcgarry } 45 1.1 gmcgarry if (execvp(argv[0],args) < 0) { 46 1.1 gmcgarry printf("exec failed\n"); 47 1.1 gmcgarry return (0); 48 1.1 gmcgarry } 49 1.1 gmcgarry } 50 1.1 gmcgarry 51 1.1 gmcgarry start: 52 1.1 gmcgarry count++; 53 1.1 gmcgarry if (count > COUNT) 54 1.1 gmcgarry goto end; 55 1.1 gmcgarry 56 1.1 gmcgarry while (!handled) { 57 1.1 gmcgarry continue; 58 1.1 gmcgarry } 59 1.1 gmcgarry end: 60 1.1 gmcgarry 61 1.1 gmcgarry return (handled != 0); 62 1.1 gmcgarry } 63