#define _GNU_SOURCE
#define _FILE_OFFSET_BITS 64
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <sys/types.h>
#include <sys/wait.h>

int run;

void *raw_threadproc(void *arg)
{
	struct rlimit rlim;
	rlim.rlim_cur = 16 * 1024 * 1024;
	rlim.rlim_max = 16 * 1024 * 1024;

	while (!run) ;

	while (1)
		setrlimit(RLIMIT_STACK, &rlim);
}

int main(void)
{
	int pid;
	while (1) {
		pid = fork();
		if (pid == 0) {
			pthread_t id;
			int i;
			//for (i = 0; i < 3; i++)
			//	pthread_create(&id, NULL, raw_threadproc, NULL);
			run = 1;
			execl("/sbin/checklimit", "/sbin/checklimit", NULL);
		} else if (pid > 0) {
			int i;
			struct rlimit rlim, old_rlim;
			rlim.rlim_cur = 16 * 1024 * 1024;
			rlim.rlim_max = 16 * 1024 * 1024;
			for (i = 0; i < 10000; i++)
				prlimit(pid, RLIMIT_STACK, &rlim, &old_rlim);
			wait(NULL);
		}
	}
}
