#include #include #include #include #include #include #include #include static void use_up_memory (void) { struct rlimit rl; getrlimit (RLIMIT_AS, &rl); rl.rlim_cur = 10 * 1024 * 1024; setrlimit (RLIMIT_AS, &rl); char *c; int PAGESIZE = getpagesize (); while (1) { c = mmap (NULL, PAGESIZE, PROT_NONE, MAP_ANON | MAP_PRIVATE, -1, 0); if (c == MAP_FAILED) break; } } static void * child (void *arg) { sleep (1); return arg; } static int do_test (void) { int err; pthread_t tid; use_up_memory (); err = pthread_create (&tid, NULL, child, NULL); if (err != 0) { printf ("pthread_create returns %d: %s\n", err, err == EAGAIN ? "OK" : "FAIL"); return err != EAGAIN; } /* We did not fail to allocate memory despite the preparation. Oh well. */ return 0; } #define TEST_FUNCTION do_test () #include "../test-skeleton.c"