From 0078f3261d35531643989ca51d263fb4aeb61dda Mon Sep 17 00:00:00 2001 From: "Federico G. Schwindt" Date: Mon, 27 Feb 2012 23:40:38 +0000 Subject: test based on python's dubious test_3_join_in_forked_from_thread test. --- regress/lib/libpthread/blocked_join/Makefile | 5 ++ regress/lib/libpthread/blocked_join/blocked_join.c | 54 ++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 regress/lib/libpthread/blocked_join/Makefile create mode 100644 regress/lib/libpthread/blocked_join/blocked_join.c (limited to 'regress') diff --git a/regress/lib/libpthread/blocked_join/Makefile b/regress/lib/libpthread/blocked_join/Makefile new file mode 100644 index 00000000000..0ff3f04b83d --- /dev/null +++ b/regress/lib/libpthread/blocked_join/Makefile @@ -0,0 +1,5 @@ +# $OpenBSD: Makefile,v 1.1 2012/02/27 23:40:37 fgsch Exp $ + +PROG = blocked_join + +.include diff --git a/regress/lib/libpthread/blocked_join/blocked_join.c b/regress/lib/libpthread/blocked_join/blocked_join.c new file mode 100644 index 00000000000..0032dfbd184 --- /dev/null +++ b/regress/lib/libpthread/blocked_join/blocked_join.c @@ -0,0 +1,54 @@ +/* $OpenBSD: blocked_join.c,v 1.1 2012/02/27 23:40:37 fgsch Exp $ */ +/* + * Federico G. Schwindt , 2012. Public Domain. + */ + +#include +#include +#include +#include +#include +#include +#include "test.h" + +void * +deadlock_detector(void *arg) +{ + sleep(10); + PANIC("deadlock detected"); +} + +void * +joiner(void *arg) +{ + pthread_t mainthread = *(pthread_t *)arg; + ASSERT(pthread_join(mainthread, NULL) == EDEADLK); + return (NULL); +} + +int +main(int argc, char **argv) +{ + pthread_t d, t, self = pthread_self(); + pid_t pid; + + switch ((pid = fork())) { + case -1: + PANIC("cannot fork"); + /* NOTREACHED */ + + case 0: + /* child */ + break; + + default: + CHECKr(waitpid(pid, NULL, 0)); + _exit(0); + /* NOTREACHED */ + } + + CHECKr(pthread_create(&d, NULL, deadlock_detector, NULL)); + CHECKr(pthread_create(&t, NULL, joiner, &self)); + CHECKr(pthread_join(t, NULL)); + SUCCEED; +} -- cgit v1.2.3