(root)/
glibc-2.38/
nptl/
pthread_cond_init.c
       1  /* Copyright (C) 2002-2023 Free Software Foundation, Inc.
       2     This file is part of the GNU C Library.
       3  
       4     The GNU C Library is free software; you can redistribute it and/or
       5     modify it under the terms of the GNU Lesser General Public
       6     License as published by the Free Software Foundation; either
       7     version 2.1 of the License, or (at your option) any later version.
       8  
       9     The GNU C Library is distributed in the hope that it will be useful,
      10     but WITHOUT ANY WARRANTY; without even the implied warranty of
      11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      12     Lesser General Public License for more details.
      13  
      14     You should have received a copy of the GNU Lesser General Public
      15     License along with the GNU C Library; if not, see
      16     <https://www.gnu.org/licenses/>.  */
      17  
      18  #include <shlib-compat.h>
      19  #include "pthreadP.h"
      20  #include <stap-probe.h>
      21  #include <string.h>
      22  
      23  
      24  /* See __pthread_cond_wait for details.  */
      25  int
      26  __pthread_cond_init (pthread_cond_t *cond, const pthread_condattr_t *cond_attr)
      27  {
      28    ASSERT_TYPE_SIZE (pthread_cond_t, __SIZEOF_PTHREAD_COND_T);
      29  
      30    struct pthread_condattr *icond_attr = (struct pthread_condattr *) cond_attr;
      31  
      32    memset (cond, 0, sizeof (pthread_cond_t));
      33  
      34    /* Update the pretty printers if the internal representation of icond_attr
      35       is changed.  */
      36  
      37    /* Iff not equal to ~0l, this is a PTHREAD_PROCESS_PRIVATE condvar.  */
      38    if (icond_attr != NULL && (icond_attr->value & 1) != 0)
      39      cond->__data.__wrefs |= __PTHREAD_COND_SHARED_MASK;
      40    int clockid = (icond_attr != NULL
      41  		 ? ((icond_attr->value >> 1) & ((1 << COND_CLOCK_BITS) - 1))
      42  		 : CLOCK_REALTIME);
      43    /* If 0, CLOCK_REALTIME is used; CLOCK_MONOTONIC otherwise.  */
      44    if (clockid != CLOCK_REALTIME)
      45      cond->__data.__wrefs |= __PTHREAD_COND_CLOCK_MONOTONIC_MASK;
      46  
      47    LIBC_PROBE (cond_init, 2, cond, cond_attr);
      48  
      49    return 0;
      50  }
      51  libc_hidden_def (__pthread_cond_init)
      52  versioned_symbol (libc, __pthread_cond_init,
      53  		  pthread_cond_init, GLIBC_2_3_2);