This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH v2 3/4] nptl: Add pthread_clockjoin_np
- From: Mike Crowe <mac at mcrowe dot com>
- To: libc-alpha at sourceware dot org
- Date: Tue, 8 Oct 2019 09:26:04 +0100
- Subject: Re: [PATCH v2 3/4] nptl: Add pthread_clockjoin_np
- References: <cover.3b6b26e85a044f5ad7494dfb035620d75eb57c63.1568809830.git-series.mac@mcrowe.com> <3b240188c00f3e6471d1ddeec2dfee80515da222.1568809830.git-series.mac@mcrowe.com>
On Wednesday 18 September 2019 at 13:30:55 +0100, Mike Crowe wrote:
> Introduce pthread_clockjoin_np as a version of pthread_timedjoin_np that
> accepts a clockid_t parameter to indicate which clock the timeout should be
> measured against. This mirrors the recently-added POSIX-proposed "clock"
> wait functions.
[snip]
> diff --git a/nptl/tst-join3.c b/nptl/tst-join3.c
> index a4ae459..c06e65a 100644
> --- a/nptl/tst-join3.c
> +++ b/nptl/tst-join3.c
> @@ -28,6 +28,8 @@
> #include <support/xtime.h>
>
>
> +#define CLOCK_USE_TIMEDJOIN (-1)
> +
> static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
>
>
> @@ -35,19 +37,23 @@ static void *
> tf (void *arg)
> {
> xpthread_mutex_lock (&lock);
> + xpthread_mutex_unlock (&lock);
>
> return (void *) 42l;
> }
>
>
> static int
> -do_test (void)
> +do_test_clock (clockid_t clockid)
> {
> + const clockid_t clockid_for_get =
> + (clockid == CLOCK_USE_TIMEDJOIN) ? CLOCK_REALTIME : clockid;
> +
> xpthread_mutex_lock (&lock);
> pthread_t th = xpthread_create (NULL, tf, NULL);
>
> void *status;
> - struct timespec timeout = timespec_add (xclock_now (CLOCK_REALTIME),
> + struct timespec timeout = timespec_add (xclock_now (clockid_for_get),
> make_timespec (0, 200000000));
>
> int val = pthread_timedjoin_np (th, &status, &timeout);
This needs to call pthread_clockjoin_np if clockid indicates so, as below.
> @@ -57,10 +63,13 @@ do_test (void)
>
> while (1)
> {
> - timeout = timespec_add (xclock_now (CLOCK_REALTIME),
> + timeout = timespec_add (xclock_now (clockid_for_get),
> make_timespec (0, 200000000));
>
> - val = pthread_timedjoin_np (th, &status, &timeout);
> + if (clockid == CLOCK_USE_TIMEDJOIN)
> + val = pthread_timedjoin_np (th, &status, &timeout);
> + else
> + val = pthread_clockjoin_np (th, &status, clockid, &timeout);
> if (val == 0)
> break;
>
> @@ -73,4 +82,13 @@ do_test (void)
> return 0;
> }
>
> +static int
> +do_test (void)
> +{
> + do_test_clock (CLOCK_USE_TIMEDJOIN);
> + do_test_clock (CLOCK_REALTIME);
> + do_test_clock (CLOCK_MONOTONIC);
> + return 0;
> +}
> +
> #include <support/test-driver.c>
Mike.