X-Git-Url: http://nsz.repo.hu/git/?p=libc-test;a=blobdiff_plain;f=src%2Fregression%2Fpthread_atfork-errno-clobber.c;fp=src%2Fregression%2Fpthread_atfork-errno-clobber.c;h=ab3b3787855f8b3d1d3b0be8549faac79e724489;hp=0000000000000000000000000000000000000000;hb=735f0ce7e431c588840f6fb832b12f6b64d7b378;hpb=cc36e56b44b013b25a5bea2f9cda309976058dba diff --git a/src/regression/pthread_atfork-errno-clobber.c b/src/regression/pthread_atfork-errno-clobber.c new file mode 100644 index 0000000..ab3b378 --- /dev/null +++ b/src/regression/pthread_atfork-errno-clobber.c @@ -0,0 +1,32 @@ +#include +#include +#include +#include +#include +#include +#include +#include "test.h" + +#define TEST(c, ...) ((c) ? 1 : (t_error(#c" failed: " __VA_ARGS__),0)) + +static void handler_errno(void) +{ + errno = 0; +} + +int main(void) +{ + t_setrlim(RLIMIT_NPROC, 0); + pthread_atfork(handler_errno, handler_errno, handler_errno); + + pid_t pid; + if (!TEST((pid = fork()) == -1, "fork succeeded despite rlimit\n")) { + if (!pid) _exit(0); + while (waitpid(pid, NULL, 0)<0 && errno==EINTR); + } else { + TEST(errno != 0, "fork failed but errno was clobbered\n"); + } + + return t_status; +} +