mirror of
https://sourceware.org/git/glibc.git
synced 2025-01-13 04:30:07 +00:00
nptl: Convert tst-join3 to use libsupport
Checked on x86_64-linux-gnu. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
This commit is contained in:
parent
f8042536dc
commit
22434b2f03
@ -22,6 +22,10 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/time.h>
|
||||
#include <support/check.h>
|
||||
#include <support/timespec.h>
|
||||
#include <support/xthread.h>
|
||||
#include <support/xtime.h>
|
||||
|
||||
|
||||
static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
|
||||
@ -30,11 +34,7 @@ static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
|
||||
static void *
|
||||
tf (void *arg)
|
||||
{
|
||||
if (pthread_mutex_lock (&lock) != 0)
|
||||
{
|
||||
puts ("child: mutex_lock failed");
|
||||
return NULL;
|
||||
}
|
||||
xpthread_mutex_lock (&lock);
|
||||
|
||||
return (void *) 42l;
|
||||
}
|
||||
@ -43,80 +43,34 @@ tf (void *arg)
|
||||
static int
|
||||
do_test (void)
|
||||
{
|
||||
pthread_t th;
|
||||
|
||||
if (pthread_mutex_lock (&lock) != 0)
|
||||
{
|
||||
puts ("mutex_lock failed");
|
||||
exit (1);
|
||||
}
|
||||
|
||||
if (pthread_create (&th, NULL, tf, NULL) != 0)
|
||||
{
|
||||
puts ("mutex_create failed");
|
||||
exit (1);
|
||||
}
|
||||
xpthread_mutex_lock (&lock);
|
||||
pthread_t th = xpthread_create (NULL, tf, NULL);
|
||||
|
||||
void *status;
|
||||
struct timespec ts;
|
||||
struct timeval tv;
|
||||
(void) gettimeofday (&tv, NULL);
|
||||
TIMEVAL_TO_TIMESPEC (&tv, &ts);
|
||||
ts.tv_nsec += 200000000;
|
||||
if (ts.tv_nsec >= 1000000000)
|
||||
{
|
||||
ts.tv_nsec -= 1000000000;
|
||||
++ts.tv_sec;
|
||||
}
|
||||
int val = pthread_timedjoin_np (th, &status, &ts);
|
||||
if (val == 0)
|
||||
{
|
||||
puts ("1st timedjoin succeeded");
|
||||
exit (1);
|
||||
}
|
||||
else if (val != ETIMEDOUT)
|
||||
{
|
||||
puts ("1st timedjoin didn't return ETIMEDOUT");
|
||||
exit (1);
|
||||
}
|
||||
struct timespec timeout = timespec_add (xclock_now (CLOCK_REALTIME),
|
||||
make_timespec (0, 200000000));
|
||||
|
||||
if (pthread_mutex_unlock (&lock) != 0)
|
||||
{
|
||||
puts ("mutex_unlock failed");
|
||||
exit (1);
|
||||
}
|
||||
int val = pthread_timedjoin_np (th, &status, &timeout);
|
||||
TEST_COMPARE (val, ETIMEDOUT);
|
||||
|
||||
xpthread_mutex_unlock (&lock);
|
||||
|
||||
while (1)
|
||||
{
|
||||
(void) gettimeofday (&tv, NULL);
|
||||
TIMEVAL_TO_TIMESPEC (&tv, &ts);
|
||||
ts.tv_nsec += 200000000;
|
||||
if (ts.tv_nsec >= 1000000000)
|
||||
{
|
||||
ts.tv_nsec -= 1000000000;
|
||||
++ts.tv_sec;
|
||||
}
|
||||
timeout = timespec_add (xclock_now (CLOCK_REALTIME),
|
||||
make_timespec (0, 200000000));
|
||||
|
||||
val = pthread_timedjoin_np (th, &status, &ts);
|
||||
val = pthread_timedjoin_np (th, &status, &timeout);
|
||||
if (val == 0)
|
||||
break;
|
||||
|
||||
if (val != ETIMEDOUT)
|
||||
{
|
||||
printf ("timedjoin returned %s (%d), expected only 0 or ETIMEDOUT\n",
|
||||
strerror (val), val);
|
||||
exit (1);
|
||||
}
|
||||
TEST_COMPARE (val, ETIMEDOUT);
|
||||
}
|
||||
|
||||
if (status != (void *) 42l)
|
||||
{
|
||||
printf ("return value %p, expected %p\n", status, (void *) 42l);
|
||||
exit (1);
|
||||
}
|
||||
FAIL_EXIT1 ("return value %p, expected %p\n", status, (void *) 42l);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define TEST_FUNCTION do_test ()
|
||||
#include "../test-skeleton.c"
|
||||
#include <support/test-driver.c>
|
||||
|
Loading…
Reference in New Issue
Block a user