(root)/
glibc-2.38/
sysdeps/
generic/
libc-lock.h
       1  /* libc-internal interface for mutex locks.  Stub version.
       2     Copyright (C) 1996-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     <https://www.gnu.org/licenses/>.  */
      18  
      19  #ifndef _LIBC_LOCK_H
      20  #define _LIBC_LOCK_H 1
      21  
      22  
      23  /* Define a lock variable NAME with storage class CLASS.  The lock must be
      24     initialized with __libc_lock_init before it can be used (or define it
      25     with __libc_lock_define_initialized, below).  Use `extern' for CLASS to
      26     declare a lock defined in another module.  In public structure
      27     definitions you must use a pointer to the lock structure (i.e., NAME
      28     begins with a `*'), because its storage size will not be known outside
      29     of libc.  */
      30  #define __libc_lock_define(CLASS,NAME)
      31  #define __libc_lock_define_recursive(CLASS,NAME)
      32  #define __rtld_lock_define_recursive(CLASS,NAME)
      33  #define __libc_rwlock_define(CLASS,NAME)
      34  
      35  /* Define an initialized lock variable NAME with storage class CLASS.  */
      36  #define __libc_lock_define_initialized(CLASS,NAME)
      37  #define __libc_rwlock_define_initialized(CLASS,NAME)
      38  
      39  /* Define an initialized recursive lock variable NAME with storage
      40     class CLASS.  */
      41  #define __libc_lock_define_initialized_recursive(CLASS,NAME)
      42  #define __rtld_lock_define_initialized_recursive(CLASS,NAME)
      43  
      44  /* Initialize the named lock variable, leaving it in a consistent, unlocked
      45     state.  */
      46  #define __libc_lock_init(NAME)
      47  #define __rtld_lock_initialize(NAME)
      48  #define __libc_rwlock_init(NAME)
      49  
      50  /* Same as last but this time we initialize a recursive mutex.  */
      51  #define __libc_lock_init_recursive(NAME)
      52  
      53  /* Finalize the named lock variable, which must be locked.  It cannot be
      54     used again until __libc_lock_init is called again on it.  This must be
      55     called on a lock variable before the containing storage is reused.  */
      56  #define __libc_lock_fini(NAME)
      57  #define __libc_rwlock_fini(NAME)
      58  
      59  /* Finalize recursive named lock.  */
      60  #define __libc_lock_fini_recursive(NAME)
      61  
      62  /* Lock the named lock variable.  */
      63  #define __libc_lock_lock(NAME)
      64  #define __libc_rwlock_rdlock(NAME)
      65  #define __libc_rwlock_wrlock(NAME)
      66  
      67  /* Lock the recursive named lock variable.  */
      68  #define __libc_lock_lock_recursive(NAME)
      69  #define __rtld_lock_lock_recursive(NAME)
      70  
      71  /* Try to lock the named lock variable.  */
      72  #define __libc_lock_trylock(NAME) 0
      73  #define __libc_rwlock_tryrdlock(NAME) 0
      74  #define __libc_rwlock_trywrlock(NAME) 0
      75  
      76  /* Try to lock the recursive named lock variable.  */
      77  #define __libc_lock_trylock_recursive(NAME) 0
      78  
      79  /* Unlock the named lock variable.  */
      80  #define __libc_lock_unlock(NAME)
      81  #define __libc_rwlock_unlock(NAME)
      82  
      83  /* Unlock the recursive named lock variable.  */
      84  #define __libc_lock_unlock_recursive(NAME)
      85  #define __rtld_lock_unlock_recursive(NAME)
      86  
      87  
      88  /* Define once control variable.  */
      89  #define __libc_once_define(CLASS, NAME) CLASS int NAME = 0
      90  
      91  /* Call handler iff the first call.  */
      92  #define __libc_once(ONCE_CONTROL, INIT_FUNCTION) \
      93    do {									      \
      94      if ((ONCE_CONTROL) == 0) {						      \
      95        INIT_FUNCTION ();							      \
      96        (ONCE_CONTROL) = 1;						      \
      97      }									      \
      98    } while (0)
      99  
     100  /* Get once control variable.  */
     101  #define __libc_once_get(ONCE_CONTROL) \
     102    ((ONCE_CONTROL) == 1)
     103  
     104  /* Start a critical region with a cleanup function */
     105  #define __libc_cleanup_region_start(DOIT, FCT, ARG)			    \
     106  {									    \
     107    typeof (***(FCT)) *__save_FCT = (DOIT) ? (FCT) : 0;			    \
     108    typeof (ARG) __save_ARG = ARG;					    \
     109    /* close brace is in __libc_cleanup_region_end below. */
     110  
     111  /* End a critical region started with __libc_cleanup_region_start. */
     112  #define __libc_cleanup_region_end(DOIT)					    \
     113    if ((DOIT) && __save_FCT != 0)					    \
     114      (*__save_FCT)(__save_ARG);						    \
     115  }
     116  
     117  /* Sometimes we have to exit the block in the middle.  */
     118  #define __libc_cleanup_end(DOIT)					    \
     119    if ((DOIT) && __save_FCT != 0)					    \
     120      (*__save_FCT)(__save_ARG);						    \
     121  
     122  #define __libc_cleanup_push(fct, arg) __libc_cleanup_region_start (1, fct, arg)
     123  #define __libc_cleanup_pop(execute) __libc_cleanup_region_end (execute)
     124  
     125  /* We need portable names for some of the functions.  */
     126  #define __libc_mutex_unlock
     127  
     128  #endif	/* libc-lock.h */