This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH v2 3/4] nptl: Add pthread_clockjoin_np


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]