From: Bart Van Assche Date: Wed, 9 Feb 2011 11:29:11 +0000 (+0000) Subject: DRD: added a test program that forks a process containing a detached thread. X-Git-Tag: svn/VALGRIND_3_7_0~678 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=673552571f5ccc736f9ec996e793d85456ae85cf;p=thirdparty%2Fvalgrind.git DRD: added a test program that forks a process containing a detached thread. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11526 --- diff --git a/drd/tests/Makefile.am b/drd/tests/Makefile.am index ea2813209a..695841ef0d 100644 --- a/drd/tests/Makefile.am +++ b/drd/tests/Makefile.am @@ -252,6 +252,8 @@ EXTRA_DIST = \ tc24_nonzero_sem.vgtest \ thread_name.stderr.exp \ thread_name.vgtest \ + threaded-fork.stderr.exp \ + threaded-fork.vgtest \ trylock.stderr.exp \ trylock.vgtest \ unit_bitmap.stderr.exp \ @@ -294,6 +296,7 @@ check_PROGRAMS = \ sem_open \ sigalrm \ thread_name \ + threaded-fork \ trylock \ unit_bitmap \ unit_vc diff --git a/drd/tests/threaded-fork.c b/drd/tests/threaded-fork.c new file mode 100644 index 0000000000..a83bf35dd2 --- /dev/null +++ b/drd/tests/threaded-fork.c @@ -0,0 +1,55 @@ +/* fork a process that has created a detached thread. */ + +#include +#include +#include +#include +#include +#include +#include + +static void *threadmain(void *dummy) +{ + sleep((unsigned long)dummy); + return NULL; +} + +int main(int argc, char **argv) +{ + int ctr; + pid_t childpid; + pthread_t childthread; + void *res; + int status; + + pthread_create(&childthread, NULL, threadmain, (void *)2); + pthread_detach(childthread); + + childpid = fork(); + switch (childpid) { + case 0: + pthread_create(&childthread, NULL, threadmain, 0); + pthread_join(childthread, &res); + exit(0); + break; + case -1: + perror("FAILED: fork failed\n"); + break; + default: + break; + } + + ctr = 0; + while (waitpid(childpid, &status, 0) != childpid) { + sleep(1); + ctr++; + if (ctr >= 10) { + fprintf(stderr, "FAILED - timeout waiting for child\n"); + return 0; + } + } + + fprintf(stderr, "PASS\n"); + + return 0; +} diff --git a/drd/tests/threaded-fork.stderr.exp b/drd/tests/threaded-fork.stderr.exp new file mode 100644 index 0000000000..79bbd8e94e --- /dev/null +++ b/drd/tests/threaded-fork.stderr.exp @@ -0,0 +1,6 @@ + + +ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) +PASS + +ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) diff --git a/drd/tests/threaded-fork.vgtest b/drd/tests/threaded-fork.vgtest new file mode 100644 index 0000000000..94497290e2 --- /dev/null +++ b/drd/tests/threaded-fork.vgtest @@ -0,0 +1,2 @@ +prereq: ./supported_libpthread +prog: threaded-fork