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