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:
Mike Crowe 2019-10-31 09:08:10 -03:00 committed by Adhemerval Zanella
parent f8042536dc
commit 22434b2f03

View File

@ -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>