#include <sys/param.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <sys/wait.h>
#include <string.h>
#include <err.h>
#include "stress.h"
#define BUFS 64
char buf [BUFS];
pid_t pid;
void (*sub)();
void
proto(void) {
int i = 2;
printf("Hello, world (%d)\n", i);
return;
}
void
alter(void) {
int i;
i = random() % BUFS;
buf[i] = random() & 0xff;
}
void
hand(int i) {
if (pid != 0) {
kill(pid, SIGHUP);
kill(pid, SIGKILL);
}
exit(1);
}
int
setup(int nb)
{
return (0);
}
void
cleanup(void)
{
}
int
test(void)
{
pid_t pid;
int i, status;
for (i = 0; i < 512; i++) {
if (i % 10 == 0)
bcopy(proto, buf, BUFS);
alter();
if ((pid = fork()) == 0) {
signal(SIGALRM, hand);
#if 0
signal(SIGILL, hand);
signal(SIGFPE, hand);
signal(SIGSEGV, hand);
signal(SIGBUS, hand);
signal(SIGURG, hand);
signal(SIGSYS, hand);
signal(SIGTRAP, hand);
#endif
alarm(2);
(*sub)();
exit(EXIT_SUCCESS);
} else if (pid > 0) {
signal(SIGALRM, hand);
alarm(3);
if (waitpid(pid, &status, 0) == -1)
warn("waitpid(%d)", pid);
alarm(0);
kill(pid, SIGINT);
} else
err(1, "fork(), %s:%d", __FILE__, __LINE__);
}
return (0);
}