Fix lib/libthr/tests/detach_test

- Eliminate race with liberal use of sleep(3) [1]
- Fix NetBSD-specific implementation way of testing result from pthread_cancel
  by testing with `td` instead of `NULL` [2]

PR: 196738 [1]
PR: 191906 [2]

MFC after: 1 week
Sponsored by: EMC / Isilon Storage Division
This commit is contained in:
Enji Cooper 2015-01-17 00:58:24 +00:00
parent e21928d3c3
commit 0c76184ced
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=277278

View File

@ -38,11 +38,18 @@ __RCSID("$NetBSD: t_detach.c,v 1.1 2011/03/24 13:52:04 jruoho Exp $");
#include "h_common.h"
#ifdef __FreeBSD__
#include <time.h>
#endif
static void *func(void *);
static void *
func(void *arg)
{
#ifdef __FreeBSD__
sleep(2);
#endif
return NULL;
}
@ -72,18 +79,25 @@ ATF_TC_BODY(pthread_detach, tc)
*/
PTHREAD_REQUIRE(pthread_detach(t));
#ifdef __FreeBSD__
sleep(1);
#endif
rv = pthread_join(t, NULL);
ATF_REQUIRE(rv == EINVAL);
#ifdef __FreeBSD__
atf_tc_expect_fail("PR # 191906: fails with EINVAL, not ESRCH");
sleep(3);
#endif
/*
* As usual, ESRCH should follow if
* we try to detach an invalid thread.
*/
#ifdef __NetBSD__
rv = pthread_cancel(NULL);
#else
rv = pthread_cancel(t);
#endif
ATF_REQUIRE(rv == ESRCH);
}