(root)/
glibc-2.38/
nptl/
pthread_clockjoin.c
       1  /* Join with a terminated thread using an specific clock.
       2     Copyright (C) 2019-2023 Free Software Foundation, Inc.
       3     This file is part of the GNU C Library.
       4  
       5     The GNU C Library is free software; you can redistribute it and/or
       6     modify it under the terms of the GNU Lesser General Public
       7     License as published by the Free Software Foundation; either
       8     version 2.1 of the License, or (at your option) any later version.
       9  
      10     The GNU C Library is distributed in the hope that it will be useful,
      11     but WITHOUT ANY WARRANTY; without even the implied warranty of
      12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      13     Lesser General Public License for more details.
      14  
      15     You should have received a copy of the GNU Lesser General Public
      16     License along with the GNU C Library; if not, see
      17     <http://www.gnu.org/licenses/>.  */
      18  
      19  #include <time.h>
      20  #include <futex-internal.h>
      21  #include "pthreadP.h"
      22  #include <shlib-compat.h>
      23  
      24  int
      25  ___pthread_clockjoin_np64 (pthread_t threadid, void **thread_return,
      26  			   clockid_t clockid,
      27  			   const struct __timespec64 *abstime)
      28  {
      29    if (!futex_abstimed_supported_clockid (clockid))
      30      return EINVAL;
      31  
      32    return __pthread_clockjoin_ex (threadid, thread_return,
      33                                   clockid, abstime, true);
      34  }
      35  
      36  #if __TIMESIZE == 64
      37  strong_alias (___pthread_clockjoin_np64, ___pthread_clockjoin_np)
      38  #else /* __TIMESPEC64 != 64 */
      39  strong_alias (___pthread_clockjoin_np64, __pthread_clockjoin_np64)
      40  libc_hidden_def (__pthread_clockjoin_np64)
      41  
      42  int
      43  ___pthread_clockjoin_np (pthread_t threadid, void **thread_return,
      44  			 clockid_t clockid, const struct timespec *abstime)
      45  {
      46    if (abstime != NULL)
      47      {
      48        struct __timespec64 ts64 = valid_timespec_to_timespec64 (*abstime);
      49        return __pthread_clockjoin_np64 (threadid, thread_return, clockid,
      50  				       &ts64);
      51      }
      52    else
      53      return __pthread_clockjoin_np64 (threadid, thread_return, clockid,
      54  				     NULL);
      55  }
      56  #endif /* __TIMESPEC64 != 64 */
      57  versioned_symbol (libc, ___pthread_clockjoin_np, pthread_clockjoin_np,
      58  		  GLIBC_2_34);
      59  #if OTHER_SHLIB_COMPAT (libpthread, GLIBC_2_31, GLIBC_2_34)
      60  compat_symbol (libpthread, ___pthread_clockjoin_np, pthread_clockjoin_np,
      61  	       GLIBC_2_31);
      62  #endif