Blame sysdeps/nptl/pthread.h

Packit Service 82fcde
/* Copyright (C) 2002-2018 Free Software Foundation, Inc.
Packit Service 82fcde
   This file is part of the GNU C Library.
Packit Service 82fcde
Packit Service 82fcde
   The GNU C Library is free software; you can redistribute it and/or
Packit Service 82fcde
   modify it under the terms of the GNU Lesser General Public
Packit Service 82fcde
   License as published by the Free Software Foundation; either
Packit Service 82fcde
   version 2.1 of the License, or (at your option) any later version.
Packit Service 82fcde
Packit Service 82fcde
   The GNU C Library is distributed in the hope that it will be useful,
Packit Service 82fcde
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 82fcde
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 82fcde
   Lesser General Public License for more details.
Packit Service 82fcde
Packit Service 82fcde
   You should have received a copy of the GNU Lesser General Public
Packit Service 82fcde
   License along with the GNU C Library; if not, see
Packit Service 82fcde
   <http://www.gnu.org/licenses/>.  */
Packit Service 82fcde
Packit Service 82fcde
#ifndef _PTHREAD_H
Packit Service 82fcde
#define _PTHREAD_H	1
Packit Service 82fcde
Packit Service 82fcde
#include <features.h>
Packit Service 82fcde
#include <endian.h>
Packit Service 82fcde
#include <sched.h>
Packit Service 82fcde
#include <time.h>
Packit Service 82fcde
Packit Service 82fcde
#include <bits/pthreadtypes.h>
Packit Service 82fcde
#include <bits/setjmp.h>
Packit Service 82fcde
#include <bits/wordsize.h>
Packit Service 82fcde
#include <bits/types/struct_timespec.h>
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Detach state.  */
Packit Service 82fcde
enum
Packit Service 82fcde
{
Packit Service 82fcde
  PTHREAD_CREATE_JOINABLE,
Packit Service 82fcde
#define PTHREAD_CREATE_JOINABLE	PTHREAD_CREATE_JOINABLE
Packit Service 82fcde
  PTHREAD_CREATE_DETACHED
Packit Service 82fcde
#define PTHREAD_CREATE_DETACHED	PTHREAD_CREATE_DETACHED
Packit Service 82fcde
};
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Mutex types.  */
Packit Service 82fcde
enum
Packit Service 82fcde
{
Packit Service 82fcde
  PTHREAD_MUTEX_TIMED_NP,
Packit Service 82fcde
  PTHREAD_MUTEX_RECURSIVE_NP,
Packit Service 82fcde
  PTHREAD_MUTEX_ERRORCHECK_NP,
Packit Service 82fcde
  PTHREAD_MUTEX_ADAPTIVE_NP
Packit Service 82fcde
#if defined __USE_UNIX98 || defined __USE_XOPEN2K8
Packit Service 82fcde
  ,
Packit Service 82fcde
  PTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_TIMED_NP,
Packit Service 82fcde
  PTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP,
Packit Service 82fcde
  PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP,
Packit Service 82fcde
  PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL
Packit Service 82fcde
#endif
Packit Service 82fcde
#ifdef __USE_GNU
Packit Service 82fcde
  /* For compatibility.  */
Packit Service 82fcde
  , PTHREAD_MUTEX_FAST_NP = PTHREAD_MUTEX_TIMED_NP
Packit Service 82fcde
#endif
Packit Service 82fcde
};
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
#ifdef __USE_XOPEN2K
Packit Service 82fcde
/* Robust mutex or not flags.  */
Packit Service 82fcde
enum
Packit Service 82fcde
{
Packit Service 82fcde
  PTHREAD_MUTEX_STALLED,
Packit Service 82fcde
  PTHREAD_MUTEX_STALLED_NP = PTHREAD_MUTEX_STALLED,
Packit Service 82fcde
  PTHREAD_MUTEX_ROBUST,
Packit Service 82fcde
  PTHREAD_MUTEX_ROBUST_NP = PTHREAD_MUTEX_ROBUST
Packit Service 82fcde
};
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
#if defined __USE_POSIX199506 || defined __USE_UNIX98
Packit Service 82fcde
/* Mutex protocols.  */
Packit Service 82fcde
enum
Packit Service 82fcde
{
Packit Service 82fcde
  PTHREAD_PRIO_NONE,
Packit Service 82fcde
  PTHREAD_PRIO_INHERIT,
Packit Service 82fcde
  PTHREAD_PRIO_PROTECT
Packit Service 82fcde
};
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
#if __PTHREAD_MUTEX_HAVE_PREV
Packit Service 82fcde
# define PTHREAD_MUTEX_INITIALIZER \
Packit Service 82fcde
  { { 0, 0, 0, 0, 0, __PTHREAD_SPINS, { 0, 0 } } }
Packit Service 82fcde
# ifdef __USE_GNU
Packit Service 82fcde
#  define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \
Packit Service 82fcde
  { { 0, 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, __PTHREAD_SPINS, { 0, 0 } } }
Packit Service 82fcde
#  define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \
Packit Service 82fcde
  { { 0, 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, __PTHREAD_SPINS, { 0, 0 } } }
Packit Service 82fcde
#  define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \
Packit Service 82fcde
  { { 0, 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, __PTHREAD_SPINS, { 0, 0 } } }
Packit Service 82fcde
Packit Service 82fcde
# endif
Packit Service 82fcde
#else
Packit Service 82fcde
# define PTHREAD_MUTEX_INITIALIZER \
Packit Service 82fcde
  { { 0, 0, 0, 0, 0, { __PTHREAD_SPINS } } }
Packit Service 82fcde
# ifdef __USE_GNU
Packit Service 82fcde
#  define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \
Packit Service 82fcde
  { { 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, 0, { __PTHREAD_SPINS } } }
Packit Service 82fcde
#  define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \
Packit Service 82fcde
  { { 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, 0, { __PTHREAD_SPINS } } }
Packit Service 82fcde
#  define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \
Packit Service 82fcde
  { { 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, 0, { __PTHREAD_SPINS } } }
Packit Service 82fcde
Packit Service 82fcde
# endif
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Read-write lock types.  */
Packit Service 82fcde
#if defined __USE_UNIX98 || defined __USE_XOPEN2K
Packit Service 82fcde
enum
Packit Service 82fcde
{
Packit Service 82fcde
  PTHREAD_RWLOCK_PREFER_READER_NP,
Packit Service 82fcde
  PTHREAD_RWLOCK_PREFER_WRITER_NP,
Packit Service 82fcde
  PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP,
Packit Service 82fcde
  PTHREAD_RWLOCK_DEFAULT_NP = PTHREAD_RWLOCK_PREFER_READER_NP
Packit Service 82fcde
};
Packit Service 82fcde
Packit Service 82fcde
/* Define __PTHREAD_RWLOCK_INT_FLAGS_SHARED to 1 if pthread_rwlock_t
Packit Service 82fcde
   has the shared field.  All 64-bit architectures have the shared field
Packit Service 82fcde
   in pthread_rwlock_t.  */
Packit Service 82fcde
#ifndef __PTHREAD_RWLOCK_INT_FLAGS_SHARED
Packit Service 82fcde
# if __WORDSIZE == 64
Packit Service 82fcde
#  define __PTHREAD_RWLOCK_INT_FLAGS_SHARED 1
Packit Service 82fcde
# endif
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
/* Read-write lock initializers.  */
Packit Service 82fcde
# define PTHREAD_RWLOCK_INITIALIZER \
Packit Service 82fcde
  { { 0, 0, 0, 0, 0, 0, 0, 0, __PTHREAD_RWLOCK_ELISION_EXTRA, 0, 0 } }
Packit Service 82fcde
# ifdef __USE_GNU
Packit Service 82fcde
#  ifdef __PTHREAD_RWLOCK_INT_FLAGS_SHARED
Packit Service 82fcde
#   define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \
Packit Service 82fcde
  { { 0, 0, 0, 0, 0, 0, 0, 0, __PTHREAD_RWLOCK_ELISION_EXTRA, 0,					      \
Packit Service 82fcde
	PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP } }
Packit Service 82fcde
#  else
Packit Service 82fcde
#   if __BYTE_ORDER == __LITTLE_ENDIAN
Packit Service 82fcde
#    define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \
Packit Service 82fcde
  { { 0, 0, 0, 0, 0, 0, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP, \
Packit Service 82fcde
      0, __PTHREAD_RWLOCK_ELISION_EXTRA, 0, 0 } }
Packit Service 82fcde
#   else
Packit Service 82fcde
#    define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \
Packit Service 82fcde
  { { 0, 0, 0, 0, 0, 0, 0, 0, 0, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP,\
Packit Service 82fcde
      0 } }
Packit Service 82fcde
#   endif
Packit Service 82fcde
#  endif
Packit Service 82fcde
# endif
Packit Service 82fcde
#endif  /* Unix98 or XOpen2K */
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Scheduler inheritance.  */
Packit Service 82fcde
enum
Packit Service 82fcde
{
Packit Service 82fcde
  PTHREAD_INHERIT_SCHED,
Packit Service 82fcde
#define PTHREAD_INHERIT_SCHED   PTHREAD_INHERIT_SCHED
Packit Service 82fcde
  PTHREAD_EXPLICIT_SCHED
Packit Service 82fcde
#define PTHREAD_EXPLICIT_SCHED  PTHREAD_EXPLICIT_SCHED
Packit Service 82fcde
};
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Scope handling.  */
Packit Service 82fcde
enum
Packit Service 82fcde
{
Packit Service 82fcde
  PTHREAD_SCOPE_SYSTEM,
Packit Service 82fcde
#define PTHREAD_SCOPE_SYSTEM    PTHREAD_SCOPE_SYSTEM
Packit Service 82fcde
  PTHREAD_SCOPE_PROCESS
Packit Service 82fcde
#define PTHREAD_SCOPE_PROCESS   PTHREAD_SCOPE_PROCESS
Packit Service 82fcde
};
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Process shared or private flag.  */
Packit Service 82fcde
enum
Packit Service 82fcde
{
Packit Service 82fcde
  PTHREAD_PROCESS_PRIVATE,
Packit Service 82fcde
#define PTHREAD_PROCESS_PRIVATE PTHREAD_PROCESS_PRIVATE
Packit Service 82fcde
  PTHREAD_PROCESS_SHARED
Packit Service 82fcde
#define PTHREAD_PROCESS_SHARED  PTHREAD_PROCESS_SHARED
Packit Service 82fcde
};
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Conditional variable handling.  */
Packit Service 82fcde
#define PTHREAD_COND_INITIALIZER { { {0}, {0}, {0, 0}, {0, 0}, 0, 0, {0, 0} } }
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Cleanup buffers */
Packit Service 82fcde
struct _pthread_cleanup_buffer
Packit Service 82fcde
{
Packit Service 82fcde
  void (*__routine) (void *);             /* Function to call.  */
Packit Service 82fcde
  void *__arg;                            /* Its argument.  */
Packit Service 82fcde
  int __canceltype;                       /* Saved cancellation type. */
Packit Service 82fcde
  struct _pthread_cleanup_buffer *__prev; /* Chaining of cleanup functions.  */
Packit Service 82fcde
};
Packit Service 82fcde
Packit Service 82fcde
/* Cancellation */
Packit Service 82fcde
enum
Packit Service 82fcde
{
Packit Service 82fcde
  PTHREAD_CANCEL_ENABLE,
Packit Service 82fcde
#define PTHREAD_CANCEL_ENABLE   PTHREAD_CANCEL_ENABLE
Packit Service 82fcde
  PTHREAD_CANCEL_DISABLE
Packit Service 82fcde
#define PTHREAD_CANCEL_DISABLE  PTHREAD_CANCEL_DISABLE
Packit Service 82fcde
};
Packit Service 82fcde
enum
Packit Service 82fcde
{
Packit Service 82fcde
  PTHREAD_CANCEL_DEFERRED,
Packit Service 82fcde
#define PTHREAD_CANCEL_DEFERRED	PTHREAD_CANCEL_DEFERRED
Packit Service 82fcde
  PTHREAD_CANCEL_ASYNCHRONOUS
Packit Service 82fcde
#define PTHREAD_CANCEL_ASYNCHRONOUS	PTHREAD_CANCEL_ASYNCHRONOUS
Packit Service 82fcde
};
Packit Service 82fcde
#define PTHREAD_CANCELED ((void *) -1)
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Single execution handling.  */
Packit Service 82fcde
#define PTHREAD_ONCE_INIT 0
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
#ifdef __USE_XOPEN2K
Packit Service 82fcde
/* Value returned by 'pthread_barrier_wait' for one of the threads after
Packit Service 82fcde
   the required number of threads have called this function.
Packit Service 82fcde
   -1 is distinct from 0 and all errno constants */
Packit Service 82fcde
# define PTHREAD_BARRIER_SERIAL_THREAD -1
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
__BEGIN_DECLS
Packit Service 82fcde
Packit Service 82fcde
/* Create a new thread, starting with execution of START-ROUTINE
Packit Service 82fcde
   getting passed ARG.  Creation attributed come from ATTR.  The new
Packit Service 82fcde
   handle is stored in *NEWTHREAD.  */
Packit Service 82fcde
extern int pthread_create (pthread_t *__restrict __newthread,
Packit Service 82fcde
			   const pthread_attr_t *__restrict __attr,
Packit Service 82fcde
			   void *(*__start_routine) (void *),
Packit Service 82fcde
			   void *__restrict __arg) __THROWNL __nonnull ((1, 3));
Packit Service 82fcde
Packit Service 82fcde
/* Terminate calling thread.
Packit Service 82fcde
Packit Service 82fcde
   The registered cleanup handlers are called via exception handling
Packit Service 82fcde
   so we cannot mark this function with __THROW.*/
Packit Service 82fcde
extern void pthread_exit (void *__retval) __attribute__ ((__noreturn__));
Packit Service 82fcde
Packit Service 82fcde
/* Make calling thread wait for termination of the thread TH.  The
Packit Service 82fcde
   exit status of the thread is stored in *THREAD_RETURN, if THREAD_RETURN
Packit Service 82fcde
   is not NULL.
Packit Service 82fcde
Packit Service 82fcde
   This function is a cancellation point and therefore not marked with
Packit Service 82fcde
   __THROW.  */
Packit Service 82fcde
extern int pthread_join (pthread_t __th, void **__thread_return);
Packit Service 82fcde
Packit Service 82fcde
#ifdef __USE_GNU
Packit Service 82fcde
/* Check whether thread TH has terminated.  If yes return the status of
Packit Service 82fcde
   the thread in *THREAD_RETURN, if THREAD_RETURN is not NULL.  */
Packit Service 82fcde
extern int pthread_tryjoin_np (pthread_t __th, void **__thread_return) __THROW;
Packit Service 82fcde
Packit Service 82fcde
/* Make calling thread wait for termination of the thread TH, but only
Packit Service 82fcde
   until TIMEOUT.  The exit status of the thread is stored in
Packit Service 82fcde
   *THREAD_RETURN, if THREAD_RETURN is not NULL.
Packit Service 82fcde
Packit Service 82fcde
   This function is a cancellation point and therefore not marked with
Packit Service 82fcde
   __THROW.  */
Packit Service 82fcde
extern int pthread_timedjoin_np (pthread_t __th, void **__thread_return,
Packit Service 82fcde
				 const struct timespec *__abstime);
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
/* Indicate that the thread TH is never to be joined with PTHREAD_JOIN.
Packit Service 82fcde
   The resources of TH will therefore be freed immediately when it
Packit Service 82fcde
   terminates, instead of waiting for another thread to perform PTHREAD_JOIN
Packit Service 82fcde
   on it.  */
Packit Service 82fcde
extern int pthread_detach (pthread_t __th) __THROW;
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Obtain the identifier of the current thread.  */
Packit Service 82fcde
extern pthread_t pthread_self (void) __THROW __attribute__ ((__const__));
Packit Service 82fcde
Packit Service 82fcde
/* Compare two thread identifiers.  */
Packit Service 82fcde
extern int pthread_equal (pthread_t __thread1, pthread_t __thread2)
Packit Service 82fcde
  __THROW __attribute__ ((__const__));
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Thread attribute handling.  */
Packit Service 82fcde
Packit Service 82fcde
/* Initialize thread attribute *ATTR with default attributes
Packit Service 82fcde
   (detachstate is PTHREAD_JOINABLE, scheduling policy is SCHED_OTHER,
Packit Service 82fcde
    no user-provided stack).  */
Packit Service 82fcde
extern int pthread_attr_init (pthread_attr_t *__attr) __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Destroy thread attribute *ATTR.  */
Packit Service 82fcde
extern int pthread_attr_destroy (pthread_attr_t *__attr)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Get detach state attribute.  */
Packit Service 82fcde
extern int pthread_attr_getdetachstate (const pthread_attr_t *__attr,
Packit Service 82fcde
					int *__detachstate)
Packit Service 82fcde
     __THROW __nonnull ((1, 2));
Packit Service 82fcde
Packit Service 82fcde
/* Set detach state attribute.  */
Packit Service 82fcde
extern int pthread_attr_setdetachstate (pthread_attr_t *__attr,
Packit Service 82fcde
					int __detachstate)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Get the size of the guard area created for stack overflow protection.  */
Packit Service 82fcde
extern int pthread_attr_getguardsize (const pthread_attr_t *__attr,
Packit Service 82fcde
				      size_t *__guardsize)
Packit Service 82fcde
     __THROW __nonnull ((1, 2));
Packit Service 82fcde
Packit Service 82fcde
/* Set the size of the guard area created for stack overflow protection.  */
Packit Service 82fcde
extern int pthread_attr_setguardsize (pthread_attr_t *__attr,
Packit Service 82fcde
				      size_t __guardsize)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Return in *PARAM the scheduling parameters of *ATTR.  */
Packit Service 82fcde
extern int pthread_attr_getschedparam (const pthread_attr_t *__restrict __attr,
Packit Service 82fcde
				       struct sched_param *__restrict __param)
Packit Service 82fcde
     __THROW __nonnull ((1, 2));
Packit Service 82fcde
Packit Service 82fcde
/* Set scheduling parameters (priority, etc) in *ATTR according to PARAM.  */
Packit Service 82fcde
extern int pthread_attr_setschedparam (pthread_attr_t *__restrict __attr,
Packit Service 82fcde
				       const struct sched_param *__restrict
Packit Service 82fcde
				       __param) __THROW __nonnull ((1, 2));
Packit Service 82fcde
Packit Service 82fcde
/* Return in *POLICY the scheduling policy of *ATTR.  */
Packit Service 82fcde
extern int pthread_attr_getschedpolicy (const pthread_attr_t *__restrict
Packit Service 82fcde
					__attr, int *__restrict __policy)
Packit Service 82fcde
     __THROW __nonnull ((1, 2));
Packit Service 82fcde
Packit Service 82fcde
/* Set scheduling policy in *ATTR according to POLICY.  */
Packit Service 82fcde
extern int pthread_attr_setschedpolicy (pthread_attr_t *__attr, int __policy)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Return in *INHERIT the scheduling inheritance mode of *ATTR.  */
Packit Service 82fcde
extern int pthread_attr_getinheritsched (const pthread_attr_t *__restrict
Packit Service 82fcde
					 __attr, int *__restrict __inherit)
Packit Service 82fcde
     __THROW __nonnull ((1, 2));
Packit Service 82fcde
Packit Service 82fcde
/* Set scheduling inheritance mode in *ATTR according to INHERIT.  */
Packit Service 82fcde
extern int pthread_attr_setinheritsched (pthread_attr_t *__attr,
Packit Service 82fcde
					 int __inherit)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Return in *SCOPE the scheduling contention scope of *ATTR.  */
Packit Service 82fcde
extern int pthread_attr_getscope (const pthread_attr_t *__restrict __attr,
Packit Service 82fcde
				  int *__restrict __scope)
Packit Service 82fcde
     __THROW __nonnull ((1, 2));
Packit Service 82fcde
Packit Service 82fcde
/* Set scheduling contention scope in *ATTR according to SCOPE.  */
Packit Service 82fcde
extern int pthread_attr_setscope (pthread_attr_t *__attr, int __scope)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Return the previously set address for the stack.  */
Packit Service 82fcde
extern int pthread_attr_getstackaddr (const pthread_attr_t *__restrict
Packit Service 82fcde
				      __attr, void **__restrict __stackaddr)
Packit Service 82fcde
     __THROW __nonnull ((1, 2)) __attribute_deprecated__;
Packit Service 82fcde
Packit Service 82fcde
/* Set the starting address of the stack of the thread to be created.
Packit Service 82fcde
   Depending on whether the stack grows up or down the value must either
Packit Service 82fcde
   be higher or lower than all the address in the memory block.  The
Packit Service 82fcde
   minimal size of the block must be PTHREAD_STACK_MIN.  */
Packit Service 82fcde
extern int pthread_attr_setstackaddr (pthread_attr_t *__attr,
Packit Service 82fcde
				      void *__stackaddr)
Packit Service 82fcde
     __THROW __nonnull ((1)) __attribute_deprecated__;
Packit Service 82fcde
Packit Service 82fcde
/* Return the currently used minimal stack size.  */
Packit Service 82fcde
extern int pthread_attr_getstacksize (const pthread_attr_t *__restrict
Packit Service 82fcde
				      __attr, size_t *__restrict __stacksize)
Packit Service 82fcde
     __THROW __nonnull ((1, 2));
Packit Service 82fcde
Packit Service 82fcde
/* Add information about the minimum stack size needed for the thread
Packit Service 82fcde
   to be started.  This size must never be less than PTHREAD_STACK_MIN
Packit Service 82fcde
   and must also not exceed the system limits.  */
Packit Service 82fcde
extern int pthread_attr_setstacksize (pthread_attr_t *__attr,
Packit Service 82fcde
				      size_t __stacksize)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
#ifdef __USE_XOPEN2K
Packit Service 82fcde
/* Return the previously set address for the stack.  */
Packit Service 82fcde
extern int pthread_attr_getstack (const pthread_attr_t *__restrict __attr,
Packit Service 82fcde
				  void **__restrict __stackaddr,
Packit Service 82fcde
				  size_t *__restrict __stacksize)
Packit Service 82fcde
     __THROW __nonnull ((1, 2, 3));
Packit Service 82fcde
Packit Service 82fcde
/* The following two interfaces are intended to replace the last two.  They
Packit Service 82fcde
   require setting the address as well as the size since only setting the
Packit Service 82fcde
   address will make the implementation on some architectures impossible.  */
Packit Service 82fcde
extern int pthread_attr_setstack (pthread_attr_t *__attr, void *__stackaddr,
Packit Service 82fcde
				  size_t __stacksize) __THROW __nonnull ((1));
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
#ifdef __USE_GNU
Packit Service 82fcde
/* Thread created with attribute ATTR will be limited to run only on
Packit Service 82fcde
   the processors represented in CPUSET.  */
Packit Service 82fcde
extern int pthread_attr_setaffinity_np (pthread_attr_t *__attr,
Packit Service 82fcde
					size_t __cpusetsize,
Packit Service 82fcde
					const cpu_set_t *__cpuset)
Packit Service 82fcde
     __THROW __nonnull ((1, 3));
Packit Service 82fcde
Packit Service 82fcde
/* Get bit set in CPUSET representing the processors threads created with
Packit Service 82fcde
   ATTR can run on.  */
Packit Service 82fcde
extern int pthread_attr_getaffinity_np (const pthread_attr_t *__attr,
Packit Service 82fcde
					size_t __cpusetsize,
Packit Service 82fcde
					cpu_set_t *__cpuset)
Packit Service 82fcde
     __THROW __nonnull ((1, 3));
Packit Service 82fcde
Packit Service 82fcde
/* Get the default attributes used by pthread_create in this process.  */
Packit Service 82fcde
extern int pthread_getattr_default_np (pthread_attr_t *__attr)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Set the default attributes to be used by pthread_create in this
Packit Service 82fcde
   process.  */
Packit Service 82fcde
extern int pthread_setattr_default_np (const pthread_attr_t *__attr)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Initialize thread attribute *ATTR with attributes corresponding to the
Packit Service 82fcde
   already running thread TH.  It shall be called on uninitialized ATTR
Packit Service 82fcde
   and destroyed with pthread_attr_destroy when no longer needed.  */
Packit Service 82fcde
extern int pthread_getattr_np (pthread_t __th, pthread_attr_t *__attr)
Packit Service 82fcde
     __THROW __nonnull ((2));
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Functions for scheduling control.  */
Packit Service 82fcde
Packit Service 82fcde
/* Set the scheduling parameters for TARGET_THREAD according to POLICY
Packit Service 82fcde
   and *PARAM.  */
Packit Service 82fcde
extern int pthread_setschedparam (pthread_t __target_thread, int __policy,
Packit Service 82fcde
				  const struct sched_param *__param)
Packit Service 82fcde
     __THROW __nonnull ((3));
Packit Service 82fcde
Packit Service 82fcde
/* Return in *POLICY and *PARAM the scheduling parameters for TARGET_THREAD. */
Packit Service 82fcde
extern int pthread_getschedparam (pthread_t __target_thread,
Packit Service 82fcde
				  int *__restrict __policy,
Packit Service 82fcde
				  struct sched_param *__restrict __param)
Packit Service 82fcde
     __THROW __nonnull ((2, 3));
Packit Service 82fcde
Packit Service 82fcde
/* Set the scheduling priority for TARGET_THREAD.  */
Packit Service 82fcde
extern int pthread_setschedprio (pthread_t __target_thread, int __prio)
Packit Service 82fcde
     __THROW;
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
#ifdef __USE_GNU
Packit Service 82fcde
/* Get thread name visible in the kernel and its interfaces.  */
Packit Service 82fcde
extern int pthread_getname_np (pthread_t __target_thread, char *__buf,
Packit Service 82fcde
			       size_t __buflen)
Packit Service 82fcde
     __THROW __nonnull ((2));
Packit Service 82fcde
Packit Service 82fcde
/* Set thread name visible in the kernel and its interfaces.  */
Packit Service 82fcde
extern int pthread_setname_np (pthread_t __target_thread, const char *__name)
Packit Service 82fcde
     __THROW __nonnull ((2));
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
#ifdef __USE_UNIX98
Packit Service 82fcde
/* Determine level of concurrency.  */
Packit Service 82fcde
extern int pthread_getconcurrency (void) __THROW;
Packit Service 82fcde
Packit Service 82fcde
/* Set new concurrency level to LEVEL.  */
Packit Service 82fcde
extern int pthread_setconcurrency (int __level) __THROW;
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
#ifdef __USE_GNU
Packit Service 82fcde
/* Yield the processor to another thread or process.
Packit Service 82fcde
   This function is similar to the POSIX `sched_yield' function but
Packit Service 82fcde
   might be differently implemented in the case of a m-on-n thread
Packit Service 82fcde
   implementation.  */
Packit Service 82fcde
extern int pthread_yield (void) __THROW;
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Limit specified thread TH to run only on the processors represented
Packit Service 82fcde
   in CPUSET.  */
Packit Service 82fcde
extern int pthread_setaffinity_np (pthread_t __th, size_t __cpusetsize,
Packit Service 82fcde
				   const cpu_set_t *__cpuset)
Packit Service 82fcde
     __THROW __nonnull ((3));
Packit Service 82fcde
Packit Service 82fcde
/* Get bit set in CPUSET representing the processors TH can run on.  */
Packit Service 82fcde
extern int pthread_getaffinity_np (pthread_t __th, size_t __cpusetsize,
Packit Service 82fcde
				   cpu_set_t *__cpuset)
Packit Service 82fcde
     __THROW __nonnull ((3));
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Functions for handling initialization.  */
Packit Service 82fcde
Packit Service 82fcde
/* Guarantee that the initialization function INIT_ROUTINE will be called
Packit Service 82fcde
   only once, even if pthread_once is executed several times with the
Packit Service 82fcde
   same ONCE_CONTROL argument. ONCE_CONTROL must point to a static or
Packit Service 82fcde
   extern variable initialized to PTHREAD_ONCE_INIT.
Packit Service 82fcde
Packit Service 82fcde
   The initialization functions might throw exception which is why
Packit Service 82fcde
   this function is not marked with __THROW.  */
Packit Service 82fcde
extern int pthread_once (pthread_once_t *__once_control,
Packit Service 82fcde
			 void (*__init_routine) (void)) __nonnull ((1, 2));
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Functions for handling cancellation.
Packit Service 82fcde
Packit Service 82fcde
   Note that these functions are explicitly not marked to not throw an
Packit Service 82fcde
   exception in C++ code.  If cancellation is implemented by unwinding
Packit Service 82fcde
   this is necessary to have the compiler generate the unwind information.  */
Packit Service 82fcde
Packit Service 82fcde
/* Set cancelability state of current thread to STATE, returning old
Packit Service 82fcde
   state in *OLDSTATE if OLDSTATE is not NULL.  */
Packit Service 82fcde
extern int pthread_setcancelstate (int __state, int *__oldstate);
Packit Service 82fcde
Packit Service 82fcde
/* Set cancellation state of current thread to TYPE, returning the old
Packit Service 82fcde
   type in *OLDTYPE if OLDTYPE is not NULL.  */
Packit Service 82fcde
extern int pthread_setcanceltype (int __type, int *__oldtype);
Packit Service 82fcde
Packit Service 82fcde
/* Cancel THREAD immediately or at the next possibility.  */
Packit Service 82fcde
extern int pthread_cancel (pthread_t __th);
Packit Service 82fcde
Packit Service 82fcde
/* Test for pending cancellation for the current thread and terminate
Packit Service 82fcde
   the thread as per pthread_exit(PTHREAD_CANCELED) if it has been
Packit Service 82fcde
   cancelled.  */
Packit Service 82fcde
extern void pthread_testcancel (void);
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Cancellation handling with integration into exception handling.  */
Packit Service 82fcde
Packit Service 82fcde
typedef struct
Packit Service 82fcde
{
Packit Service 82fcde
  struct
Packit Service 82fcde
  {
Packit Service 82fcde
    __jmp_buf __cancel_jmp_buf;
Packit Service 82fcde
    int __mask_was_saved;
Packit Service 82fcde
  } __cancel_jmp_buf[1];
Packit Service 82fcde
  void *__pad[4];
Packit Service 82fcde
} __pthread_unwind_buf_t __attribute__ ((__aligned__));
Packit Service 82fcde
Packit Service 82fcde
/* No special attributes by default.  */
Packit Service 82fcde
#ifndef __cleanup_fct_attribute
Packit Service 82fcde
# define __cleanup_fct_attribute
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Structure to hold the cleanup handler information.  */
Packit Service 82fcde
struct __pthread_cleanup_frame
Packit Service 82fcde
{
Packit Service 82fcde
  void (*__cancel_routine) (void *);
Packit Service 82fcde
  void *__cancel_arg;
Packit Service 82fcde
  int __do_it;
Packit Service 82fcde
  int __cancel_type;
Packit Service 82fcde
};
Packit Service 82fcde
Packit Service 82fcde
#if defined __GNUC__ && defined __EXCEPTIONS
Packit Service 82fcde
# ifdef __cplusplus
Packit Service 82fcde
/* Class to handle cancellation handler invocation.  */
Packit Service 82fcde
class __pthread_cleanup_class
Packit Service 82fcde
{
Packit Service 82fcde
  void (*__cancel_routine) (void *);
Packit Service 82fcde
  void *__cancel_arg;
Packit Service 82fcde
  int __do_it;
Packit Service 82fcde
  int __cancel_type;
Packit Service 82fcde
Packit Service 82fcde
 public:
Packit Service 82fcde
  __pthread_cleanup_class (void (*__fct) (void *), void *__arg)
Packit Service 82fcde
    : __cancel_routine (__fct), __cancel_arg (__arg), __do_it (1) { }
Packit Service 82fcde
  ~__pthread_cleanup_class () { if (__do_it) __cancel_routine (__cancel_arg); }
Packit Service 82fcde
  void __setdoit (int __newval) { __do_it = __newval; }
Packit Service 82fcde
  void __defer () { pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED,
Packit Service 82fcde
					   &__cancel_type); }
Packit Service 82fcde
  void __restore () const { pthread_setcanceltype (__cancel_type, 0); }
Packit Service 82fcde
};
Packit Service 82fcde
Packit Service 82fcde
/* Install a cleanup handler: ROUTINE will be called with arguments ARG
Packit Service 82fcde
   when the thread is canceled or calls pthread_exit.  ROUTINE will also
Packit Service 82fcde
   be called with arguments ARG when the matching pthread_cleanup_pop
Packit Service 82fcde
   is executed with non-zero EXECUTE argument.
Packit Service 82fcde
Packit Service 82fcde
   pthread_cleanup_push and pthread_cleanup_pop are macros and must always
Packit Service 82fcde
   be used in matching pairs at the same nesting level of braces.  */
Packit Service 82fcde
#  define pthread_cleanup_push(routine, arg) \
Packit Service 82fcde
  do {									      \
Packit Service 82fcde
    __pthread_cleanup_class __clframe (routine, arg)
Packit Service 82fcde
Packit Service 82fcde
/* Remove a cleanup handler installed by the matching pthread_cleanup_push.
Packit Service 82fcde
   If EXECUTE is non-zero, the handler function is called. */
Packit Service 82fcde
#  define pthread_cleanup_pop(execute) \
Packit Service 82fcde
    __clframe.__setdoit (execute);					      \
Packit Service 82fcde
  } while (0)
Packit Service 82fcde
Packit Service 82fcde
#  ifdef __USE_GNU
Packit Service 82fcde
/* Install a cleanup handler as pthread_cleanup_push does, but also
Packit Service 82fcde
   saves the current cancellation type and sets it to deferred
Packit Service 82fcde
   cancellation.  */
Packit Service 82fcde
#   define pthread_cleanup_push_defer_np(routine, arg) \
Packit Service 82fcde
  do {									      \
Packit Service 82fcde
    __pthread_cleanup_class __clframe (routine, arg);			      \
Packit Service 82fcde
    __clframe.__defer ()
Packit Service 82fcde
Packit Service 82fcde
/* Remove a cleanup handler as pthread_cleanup_pop does, but also
Packit Service 82fcde
   restores the cancellation type that was in effect when the matching
Packit Service 82fcde
   pthread_cleanup_push_defer was called.  */
Packit Service 82fcde
#   define pthread_cleanup_pop_restore_np(execute) \
Packit Service 82fcde
    __clframe.__restore ();						      \
Packit Service 82fcde
    __clframe.__setdoit (execute);					      \
Packit Service 82fcde
  } while (0)
Packit Service 82fcde
#  endif
Packit Service 82fcde
# else
Packit Service 82fcde
/* Function called to call the cleanup handler.  As an extern inline
Packit Service 82fcde
   function the compiler is free to decide inlining the change when
Packit Service 82fcde
   needed or fall back on the copy which must exist somewhere
Packit Service 82fcde
   else.  */
Packit Service 82fcde
__extern_inline void
Packit Service 82fcde
__pthread_cleanup_routine (struct __pthread_cleanup_frame *__frame)
Packit Service 82fcde
{
Packit Service 82fcde
  if (__frame->__do_it)
Packit Service 82fcde
    __frame->__cancel_routine (__frame->__cancel_arg);
Packit Service 82fcde
}
Packit Service 82fcde
Packit Service 82fcde
/* Install a cleanup handler: ROUTINE will be called with arguments ARG
Packit Service 82fcde
   when the thread is canceled or calls pthread_exit.  ROUTINE will also
Packit Service 82fcde
   be called with arguments ARG when the matching pthread_cleanup_pop
Packit Service 82fcde
   is executed with non-zero EXECUTE argument.
Packit Service 82fcde
Packit Service 82fcde
   pthread_cleanup_push and pthread_cleanup_pop are macros and must always
Packit Service 82fcde
   be used in matching pairs at the same nesting level of braces.  */
Packit Service 82fcde
#  define pthread_cleanup_push(routine, arg) \
Packit Service 82fcde
  do {									      \
Packit Service 82fcde
    struct __pthread_cleanup_frame __clframe				      \
Packit Service 82fcde
      __attribute__ ((__cleanup__ (__pthread_cleanup_routine)))		      \
Packit Service 82fcde
      = { .__cancel_routine = (routine), .__cancel_arg = (arg),	 	      \
Packit Service 82fcde
	  .__do_it = 1 };
Packit Service 82fcde
Packit Service 82fcde
/* Remove a cleanup handler installed by the matching pthread_cleanup_push.
Packit Service 82fcde
   If EXECUTE is non-zero, the handler function is called. */
Packit Service 82fcde
#  define pthread_cleanup_pop(execute) \
Packit Service 82fcde
    __clframe.__do_it = (execute);					      \
Packit Service 82fcde
  } while (0)
Packit Service 82fcde
Packit Service 82fcde
#  ifdef __USE_GNU
Packit Service 82fcde
/* Install a cleanup handler as pthread_cleanup_push does, but also
Packit Service 82fcde
   saves the current cancellation type and sets it to deferred
Packit Service 82fcde
   cancellation.  */
Packit Service 82fcde
#   define pthread_cleanup_push_defer_np(routine, arg) \
Packit Service 82fcde
  do {									      \
Packit Service 82fcde
    struct __pthread_cleanup_frame __clframe				      \
Packit Service 82fcde
      __attribute__ ((__cleanup__ (__pthread_cleanup_routine)))		      \
Packit Service 82fcde
      = { .__cancel_routine = (routine), .__cancel_arg = (arg),		      \
Packit Service 82fcde
	  .__do_it = 1 };						      \
Packit Service 82fcde
    (void) pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED,		      \
Packit Service 82fcde
				  &__clframe.__cancel_type)
Packit Service 82fcde
Packit Service 82fcde
/* Remove a cleanup handler as pthread_cleanup_pop does, but also
Packit Service 82fcde
   restores the cancellation type that was in effect when the matching
Packit Service 82fcde
   pthread_cleanup_push_defer was called.  */
Packit Service 82fcde
#   define pthread_cleanup_pop_restore_np(execute) \
Packit Service 82fcde
    (void) pthread_setcanceltype (__clframe.__cancel_type, NULL);	      \
Packit Service 82fcde
    __clframe.__do_it = (execute);					      \
Packit Service 82fcde
  } while (0)
Packit Service 82fcde
#  endif
Packit Service 82fcde
# endif
Packit Service 82fcde
#else
Packit Service 82fcde
/* Install a cleanup handler: ROUTINE will be called with arguments ARG
Packit Service 82fcde
   when the thread is canceled or calls pthread_exit.  ROUTINE will also
Packit Service 82fcde
   be called with arguments ARG when the matching pthread_cleanup_pop
Packit Service 82fcde
   is executed with non-zero EXECUTE argument.
Packit Service 82fcde
Packit Service 82fcde
   pthread_cleanup_push and pthread_cleanup_pop are macros and must always
Packit Service 82fcde
   be used in matching pairs at the same nesting level of braces.  */
Packit Service 82fcde
# define pthread_cleanup_push(routine, arg) \
Packit Service 82fcde
  do {									      \
Packit Service 82fcde
    __pthread_unwind_buf_t __cancel_buf;				      \
Packit Service 82fcde
    void (*__cancel_routine) (void *) = (routine);			      \
Packit Service 82fcde
    void *__cancel_arg = (arg);						      \
Packit Service 82fcde
    int __not_first_call = __sigsetjmp ((struct __jmp_buf_tag *) (void *)     \
Packit Service 82fcde
					__cancel_buf.__cancel_jmp_buf, 0);    \
Packit Service 82fcde
    if (__glibc_unlikely (__not_first_call))				      \
Packit Service 82fcde
      {									      \
Packit Service 82fcde
	__cancel_routine (__cancel_arg);				      \
Packit Service 82fcde
	__pthread_unwind_next (&__cancel_buf);				      \
Packit Service 82fcde
	/* NOTREACHED */						      \
Packit Service 82fcde
      }									      \
Packit Service 82fcde
									      \
Packit Service 82fcde
    __pthread_register_cancel (&__cancel_buf);				      \
Packit Service 82fcde
    do {
Packit Service 82fcde
extern void __pthread_register_cancel (__pthread_unwind_buf_t *__buf)
Packit Service 82fcde
     __cleanup_fct_attribute;
Packit Service 82fcde
Packit Service 82fcde
/* Remove a cleanup handler installed by the matching pthread_cleanup_push.
Packit Service 82fcde
   If EXECUTE is non-zero, the handler function is called. */
Packit Service 82fcde
# define pthread_cleanup_pop(execute) \
Packit Service 82fcde
      do { } while (0);/* Empty to allow label before pthread_cleanup_pop.  */\
Packit Service 82fcde
    } while (0);							      \
Packit Service 82fcde
    __pthread_unregister_cancel (&__cancel_buf);			      \
Packit Service 82fcde
    if (execute)							      \
Packit Service 82fcde
      __cancel_routine (__cancel_arg);					      \
Packit Service 82fcde
  } while (0)
Packit Service 82fcde
extern void __pthread_unregister_cancel (__pthread_unwind_buf_t *__buf)
Packit Service 82fcde
  __cleanup_fct_attribute;
Packit Service 82fcde
Packit Service 82fcde
# ifdef __USE_GNU
Packit Service 82fcde
/* Install a cleanup handler as pthread_cleanup_push does, but also
Packit Service 82fcde
   saves the current cancellation type and sets it to deferred
Packit Service 82fcde
   cancellation.  */
Packit Service 82fcde
#  define pthread_cleanup_push_defer_np(routine, arg) \
Packit Service 82fcde
  do {									      \
Packit Service 82fcde
    __pthread_unwind_buf_t __cancel_buf;				      \
Packit Service 82fcde
    void (*__cancel_routine) (void *) = (routine);			      \
Packit Service 82fcde
    void *__cancel_arg = (arg);						      \
Packit Service 82fcde
    int __not_first_call = __sigsetjmp ((struct __jmp_buf_tag *) (void *)     \
Packit Service 82fcde
					__cancel_buf.__cancel_jmp_buf, 0);    \
Packit Service 82fcde
    if (__glibc_unlikely (__not_first_call))				      \
Packit Service 82fcde
      {									      \
Packit Service 82fcde
	__cancel_routine (__cancel_arg);				      \
Packit Service 82fcde
	__pthread_unwind_next (&__cancel_buf);				      \
Packit Service 82fcde
	/* NOTREACHED */						      \
Packit Service 82fcde
      }									      \
Packit Service 82fcde
									      \
Packit Service 82fcde
    __pthread_register_cancel_defer (&__cancel_buf);			      \
Packit Service 82fcde
    do {
Packit Service 82fcde
extern void __pthread_register_cancel_defer (__pthread_unwind_buf_t *__buf)
Packit Service 82fcde
     __cleanup_fct_attribute;
Packit Service 82fcde
Packit Service 82fcde
/* Remove a cleanup handler as pthread_cleanup_pop does, but also
Packit Service 82fcde
   restores the cancellation type that was in effect when the matching
Packit Service 82fcde
   pthread_cleanup_push_defer was called.  */
Packit Service 82fcde
#  define pthread_cleanup_pop_restore_np(execute) \
Packit Service 82fcde
      do { } while (0);/* Empty to allow label before pthread_cleanup_pop.  */\
Packit Service 82fcde
    } while (0);							      \
Packit Service 82fcde
    __pthread_unregister_cancel_restore (&__cancel_buf);		      \
Packit Service 82fcde
    if (execute)							      \
Packit Service 82fcde
      __cancel_routine (__cancel_arg);					      \
Packit Service 82fcde
  } while (0)
Packit Service 82fcde
extern void __pthread_unregister_cancel_restore (__pthread_unwind_buf_t *__buf)
Packit Service 82fcde
  __cleanup_fct_attribute;
Packit Service 82fcde
# endif
Packit Service 82fcde
Packit Service 82fcde
/* Internal interface to initiate cleanup.  */
Packit Service 82fcde
extern void __pthread_unwind_next (__pthread_unwind_buf_t *__buf)
Packit Service 82fcde
     __cleanup_fct_attribute __attribute__ ((__noreturn__))
Packit Service 82fcde
# ifndef SHARED
Packit Service 82fcde
     __attribute__ ((__weak__))
Packit Service 82fcde
# endif
Packit Service 82fcde
     ;
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
/* Function used in the macros.  */
Packit Service 82fcde
struct __jmp_buf_tag;
Packit Service 82fcde
extern int __sigsetjmp (struct __jmp_buf_tag *__env, int __savemask) __THROWNL;
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Mutex handling.  */
Packit Service 82fcde
Packit Service 82fcde
/* Initialize a mutex.  */
Packit Service 82fcde
extern int pthread_mutex_init (pthread_mutex_t *__mutex,
Packit Service 82fcde
			       const pthread_mutexattr_t *__mutexattr)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Destroy a mutex.  */
Packit Service 82fcde
extern int pthread_mutex_destroy (pthread_mutex_t *__mutex)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Try locking a mutex.  */
Packit Service 82fcde
extern int pthread_mutex_trylock (pthread_mutex_t *__mutex)
Packit Service 82fcde
     __THROWNL __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Lock a mutex.  */
Packit Service 82fcde
extern int pthread_mutex_lock (pthread_mutex_t *__mutex)
Packit Service 82fcde
     __THROWNL __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
#ifdef __USE_XOPEN2K
Packit Service 82fcde
/* Wait until lock becomes available, or specified time passes. */
Packit Service 82fcde
extern int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex,
Packit Service 82fcde
				    const struct timespec *__restrict
Packit Service 82fcde
				    __abstime) __THROWNL __nonnull ((1, 2));
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
/* Unlock a mutex.  */
Packit Service 82fcde
extern int pthread_mutex_unlock (pthread_mutex_t *__mutex)
Packit Service 82fcde
     __THROWNL __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Get the priority ceiling of MUTEX.  */
Packit Service 82fcde
extern int pthread_mutex_getprioceiling (const pthread_mutex_t *
Packit Service 82fcde
					 __restrict __mutex,
Packit Service 82fcde
					 int *__restrict __prioceiling)
Packit Service 82fcde
     __THROW __nonnull ((1, 2));
Packit Service 82fcde
Packit Service 82fcde
/* Set the priority ceiling of MUTEX to PRIOCEILING, return old
Packit Service 82fcde
   priority ceiling value in *OLD_CEILING.  */
Packit Service 82fcde
extern int pthread_mutex_setprioceiling (pthread_mutex_t *__restrict __mutex,
Packit Service 82fcde
					 int __prioceiling,
Packit Service 82fcde
					 int *__restrict __old_ceiling)
Packit Service 82fcde
     __THROW __nonnull ((1, 3));
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
#ifdef __USE_XOPEN2K8
Packit Service 82fcde
/* Declare the state protected by MUTEX as consistent.  */
Packit Service 82fcde
extern int pthread_mutex_consistent (pthread_mutex_t *__mutex)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
# ifdef __USE_GNU
Packit Service 82fcde
extern int pthread_mutex_consistent_np (pthread_mutex_t *__mutex)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
# endif
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Functions for handling mutex attributes.  */
Packit Service 82fcde
Packit Service 82fcde
/* Initialize mutex attribute object ATTR with default attributes
Packit Service 82fcde
   (kind is PTHREAD_MUTEX_TIMED_NP).  */
Packit Service 82fcde
extern int pthread_mutexattr_init (pthread_mutexattr_t *__attr)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Destroy mutex attribute object ATTR.  */
Packit Service 82fcde
extern int pthread_mutexattr_destroy (pthread_mutexattr_t *__attr)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Get the process-shared flag of the mutex attribute ATTR.  */
Packit Service 82fcde
extern int pthread_mutexattr_getpshared (const pthread_mutexattr_t *
Packit Service 82fcde
					 __restrict __attr,
Packit Service 82fcde
					 int *__restrict __pshared)
Packit Service 82fcde
     __THROW __nonnull ((1, 2));
Packit Service 82fcde
Packit Service 82fcde
/* Set the process-shared flag of the mutex attribute ATTR.  */
Packit Service 82fcde
extern int pthread_mutexattr_setpshared (pthread_mutexattr_t *__attr,
Packit Service 82fcde
					 int __pshared)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
#if defined __USE_UNIX98 || defined __USE_XOPEN2K8
Packit Service 82fcde
/* Return in *KIND the mutex kind attribute in *ATTR.  */
Packit Service 82fcde
extern int pthread_mutexattr_gettype (const pthread_mutexattr_t *__restrict
Packit Service 82fcde
				      __attr, int *__restrict __kind)
Packit Service 82fcde
     __THROW __nonnull ((1, 2));
Packit Service 82fcde
Packit Service 82fcde
/* Set the mutex kind attribute in *ATTR to KIND (either PTHREAD_MUTEX_NORMAL,
Packit Service 82fcde
   PTHREAD_MUTEX_RECURSIVE, PTHREAD_MUTEX_ERRORCHECK, or
Packit Service 82fcde
   PTHREAD_MUTEX_DEFAULT).  */
Packit Service 82fcde
extern int pthread_mutexattr_settype (pthread_mutexattr_t *__attr, int __kind)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
/* Return in *PROTOCOL the mutex protocol attribute in *ATTR.  */
Packit Service 82fcde
extern int pthread_mutexattr_getprotocol (const pthread_mutexattr_t *
Packit Service 82fcde
					  __restrict __attr,
Packit Service 82fcde
					  int *__restrict __protocol)
Packit Service 82fcde
     __THROW __nonnull ((1, 2));
Packit Service 82fcde
Packit Service 82fcde
/* Set the mutex protocol attribute in *ATTR to PROTOCOL (either
Packit Service 82fcde
   PTHREAD_PRIO_NONE, PTHREAD_PRIO_INHERIT, or PTHREAD_PRIO_PROTECT).  */
Packit Service 82fcde
extern int pthread_mutexattr_setprotocol (pthread_mutexattr_t *__attr,
Packit Service 82fcde
					  int __protocol)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Return in *PRIOCEILING the mutex prioceiling attribute in *ATTR.  */
Packit Service 82fcde
extern int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t *
Packit Service 82fcde
					     __restrict __attr,
Packit Service 82fcde
					     int *__restrict __prioceiling)
Packit Service 82fcde
     __THROW __nonnull ((1, 2));
Packit Service 82fcde
Packit Service 82fcde
/* Set the mutex prioceiling attribute in *ATTR to PRIOCEILING.  */
Packit Service 82fcde
extern int pthread_mutexattr_setprioceiling (pthread_mutexattr_t *__attr,
Packit Service 82fcde
					     int __prioceiling)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
#ifdef __USE_XOPEN2K
Packit Service 82fcde
/* Get the robustness flag of the mutex attribute ATTR.  */
Packit Service 82fcde
extern int pthread_mutexattr_getrobust (const pthread_mutexattr_t *__attr,
Packit Service 82fcde
					int *__robustness)
Packit Service 82fcde
     __THROW __nonnull ((1, 2));
Packit Service 82fcde
# ifdef __USE_GNU
Packit Service 82fcde
extern int pthread_mutexattr_getrobust_np (const pthread_mutexattr_t *__attr,
Packit Service 82fcde
					   int *__robustness)
Packit Service 82fcde
     __THROW __nonnull ((1, 2));
Packit Service 82fcde
# endif
Packit Service 82fcde
Packit Service 82fcde
/* Set the robustness flag of the mutex attribute ATTR.  */
Packit Service 82fcde
extern int pthread_mutexattr_setrobust (pthread_mutexattr_t *__attr,
Packit Service 82fcde
					int __robustness)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
# ifdef __USE_GNU
Packit Service 82fcde
extern int pthread_mutexattr_setrobust_np (pthread_mutexattr_t *__attr,
Packit Service 82fcde
					   int __robustness)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
# endif
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
#if defined __USE_UNIX98 || defined __USE_XOPEN2K
Packit Service 82fcde
/* Functions for handling read-write locks.  */
Packit Service 82fcde
Packit Service 82fcde
/* Initialize read-write lock RWLOCK using attributes ATTR, or use
Packit Service 82fcde
   the default values if later is NULL.  */
Packit Service 82fcde
extern int pthread_rwlock_init (pthread_rwlock_t *__restrict __rwlock,
Packit Service 82fcde
				const pthread_rwlockattr_t *__restrict
Packit Service 82fcde
				__attr) __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Destroy read-write lock RWLOCK.  */
Packit Service 82fcde
extern int pthread_rwlock_destroy (pthread_rwlock_t *__rwlock)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Acquire read lock for RWLOCK.  */
Packit Service 82fcde
extern int pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock)
Packit Service 82fcde
     __THROWNL __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Try to acquire read lock for RWLOCK.  */
Packit Service 82fcde
extern int pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock)
Packit Service 82fcde
  __THROWNL __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
# ifdef __USE_XOPEN2K
Packit Service 82fcde
/* Try to acquire read lock for RWLOCK or return after specfied time.  */
Packit Service 82fcde
extern int pthread_rwlock_timedrdlock (pthread_rwlock_t *__restrict __rwlock,
Packit Service 82fcde
				       const struct timespec *__restrict
Packit Service 82fcde
				       __abstime) __THROWNL __nonnull ((1, 2));
Packit Service 82fcde
# endif
Packit Service 82fcde
Packit Service 82fcde
/* Acquire write lock for RWLOCK.  */
Packit Service 82fcde
extern int pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock)
Packit Service 82fcde
     __THROWNL __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Try to acquire write lock for RWLOCK.  */
Packit Service 82fcde
extern int pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock)
Packit Service 82fcde
     __THROWNL __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
# ifdef __USE_XOPEN2K
Packit Service 82fcde
/* Try to acquire write lock for RWLOCK or return after specfied time.  */
Packit Service 82fcde
extern int pthread_rwlock_timedwrlock (pthread_rwlock_t *__restrict __rwlock,
Packit Service 82fcde
				       const struct timespec *__restrict
Packit Service 82fcde
				       __abstime) __THROWNL __nonnull ((1, 2));
Packit Service 82fcde
# endif
Packit Service 82fcde
Packit Service 82fcde
/* Unlock RWLOCK.  */
Packit Service 82fcde
extern int pthread_rwlock_unlock (pthread_rwlock_t *__rwlock)
Packit Service 82fcde
     __THROWNL __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Functions for handling read-write lock attributes.  */
Packit Service 82fcde
Packit Service 82fcde
/* Initialize attribute object ATTR with default values.  */
Packit Service 82fcde
extern int pthread_rwlockattr_init (pthread_rwlockattr_t *__attr)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Destroy attribute object ATTR.  */
Packit Service 82fcde
extern int pthread_rwlockattr_destroy (pthread_rwlockattr_t *__attr)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Return current setting of process-shared attribute of ATTR in PSHARED.  */
Packit Service 82fcde
extern int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t *
Packit Service 82fcde
					  __restrict __attr,
Packit Service 82fcde
					  int *__restrict __pshared)
Packit Service 82fcde
     __THROW __nonnull ((1, 2));
Packit Service 82fcde
Packit Service 82fcde
/* Set process-shared attribute of ATTR to PSHARED.  */
Packit Service 82fcde
extern int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *__attr,
Packit Service 82fcde
					  int __pshared)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Return current setting of reader/writer preference.  */
Packit Service 82fcde
extern int pthread_rwlockattr_getkind_np (const pthread_rwlockattr_t *
Packit Service 82fcde
					  __restrict __attr,
Packit Service 82fcde
					  int *__restrict __pref)
Packit Service 82fcde
     __THROW __nonnull ((1, 2));
Packit Service 82fcde
Packit Service 82fcde
/* Set reader/write preference.  */
Packit Service 82fcde
extern int pthread_rwlockattr_setkind_np (pthread_rwlockattr_t *__attr,
Packit Service 82fcde
					  int __pref) __THROW __nonnull ((1));
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Functions for handling conditional variables.  */
Packit Service 82fcde
Packit Service 82fcde
/* Initialize condition variable COND using attributes ATTR, or use
Packit Service 82fcde
   the default values if later is NULL.  */
Packit Service 82fcde
extern int pthread_cond_init (pthread_cond_t *__restrict __cond,
Packit Service 82fcde
			      const pthread_condattr_t *__restrict __cond_attr)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Destroy condition variable COND.  */
Packit Service 82fcde
extern int pthread_cond_destroy (pthread_cond_t *__cond)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Wake up one thread waiting for condition variable COND.  */
Packit Service 82fcde
extern int pthread_cond_signal (pthread_cond_t *__cond)
Packit Service 82fcde
     __THROWNL __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Wake up all threads waiting for condition variables COND.  */
Packit Service 82fcde
extern int pthread_cond_broadcast (pthread_cond_t *__cond)
Packit Service 82fcde
     __THROWNL __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Wait for condition variable COND to be signaled or broadcast.
Packit Service 82fcde
   MUTEX is assumed to be locked before.
Packit Service 82fcde
Packit Service 82fcde
   This function is a cancellation point and therefore not marked with
Packit Service 82fcde
   __THROW.  */
Packit Service 82fcde
extern int pthread_cond_wait (pthread_cond_t *__restrict __cond,
Packit Service 82fcde
			      pthread_mutex_t *__restrict __mutex)
Packit Service 82fcde
     __nonnull ((1, 2));
Packit Service 82fcde
Packit Service 82fcde
/* Wait for condition variable COND to be signaled or broadcast until
Packit Service 82fcde
   ABSTIME.  MUTEX is assumed to be locked before.  ABSTIME is an
Packit Service 82fcde
   absolute time specification; zero is the beginning of the epoch
Packit Service 82fcde
   (00:00:00 GMT, January 1, 1970).
Packit Service 82fcde
Packit Service 82fcde
   This function is a cancellation point and therefore not marked with
Packit Service 82fcde
   __THROW.  */
Packit Service 82fcde
extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond,
Packit Service 82fcde
				   pthread_mutex_t *__restrict __mutex,
Packit Service 82fcde
				   const struct timespec *__restrict __abstime)
Packit Service 82fcde
     __nonnull ((1, 2, 3));
Packit Service 82fcde
Packit Service 82fcde
/* Functions for handling condition variable attributes.  */
Packit Service 82fcde
Packit Service 82fcde
/* Initialize condition variable attribute ATTR.  */
Packit Service 82fcde
extern int pthread_condattr_init (pthread_condattr_t *__attr)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Destroy condition variable attribute ATTR.  */
Packit Service 82fcde
extern int pthread_condattr_destroy (pthread_condattr_t *__attr)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Get the process-shared flag of the condition variable attribute ATTR.  */
Packit Service 82fcde
extern int pthread_condattr_getpshared (const pthread_condattr_t *
Packit Service 82fcde
					__restrict __attr,
Packit Service 82fcde
					int *__restrict __pshared)
Packit Service 82fcde
     __THROW __nonnull ((1, 2));
Packit Service 82fcde
Packit Service 82fcde
/* Set the process-shared flag of the condition variable attribute ATTR.  */
Packit Service 82fcde
extern int pthread_condattr_setpshared (pthread_condattr_t *__attr,
Packit Service 82fcde
					int __pshared) __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
#ifdef __USE_XOPEN2K
Packit Service 82fcde
/* Get the clock selected for the condition variable attribute ATTR.  */
Packit Service 82fcde
extern int pthread_condattr_getclock (const pthread_condattr_t *
Packit Service 82fcde
				      __restrict __attr,
Packit Service 82fcde
				      __clockid_t *__restrict __clock_id)
Packit Service 82fcde
     __THROW __nonnull ((1, 2));
Packit Service 82fcde
Packit Service 82fcde
/* Set the clock selected for the condition variable attribute ATTR.  */
Packit Service 82fcde
extern int pthread_condattr_setclock (pthread_condattr_t *__attr,
Packit Service 82fcde
				      __clockid_t __clock_id)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
#ifdef __USE_XOPEN2K
Packit Service 82fcde
/* Functions to handle spinlocks.  */
Packit Service 82fcde
Packit Service 82fcde
/* Initialize the spinlock LOCK.  If PSHARED is nonzero the spinlock can
Packit Service 82fcde
   be shared between different processes.  */
Packit Service 82fcde
extern int pthread_spin_init (pthread_spinlock_t *__lock, int __pshared)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Destroy the spinlock LOCK.  */
Packit Service 82fcde
extern int pthread_spin_destroy (pthread_spinlock_t *__lock)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Wait until spinlock LOCK is retrieved.  */
Packit Service 82fcde
extern int pthread_spin_lock (pthread_spinlock_t *__lock)
Packit Service 82fcde
     __THROWNL __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Try to lock spinlock LOCK.  */
Packit Service 82fcde
extern int pthread_spin_trylock (pthread_spinlock_t *__lock)
Packit Service 82fcde
     __THROWNL __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Release spinlock LOCK.  */
Packit Service 82fcde
extern int pthread_spin_unlock (pthread_spinlock_t *__lock)
Packit Service 82fcde
     __THROWNL __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Functions to handle barriers.  */
Packit Service 82fcde
Packit Service 82fcde
/* Initialize BARRIER with the attributes in ATTR.  The barrier is
Packit Service 82fcde
   opened when COUNT waiters arrived.  */
Packit Service 82fcde
extern int pthread_barrier_init (pthread_barrier_t *__restrict __barrier,
Packit Service 82fcde
				 const pthread_barrierattr_t *__restrict
Packit Service 82fcde
				 __attr, unsigned int __count)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Destroy a previously dynamically initialized barrier BARRIER.  */
Packit Service 82fcde
extern int pthread_barrier_destroy (pthread_barrier_t *__barrier)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Wait on barrier BARRIER.  */
Packit Service 82fcde
extern int pthread_barrier_wait (pthread_barrier_t *__barrier)
Packit Service 82fcde
     __THROWNL __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Initialize barrier attribute ATTR.  */
Packit Service 82fcde
extern int pthread_barrierattr_init (pthread_barrierattr_t *__attr)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Destroy previously dynamically initialized barrier attribute ATTR.  */
Packit Service 82fcde
extern int pthread_barrierattr_destroy (pthread_barrierattr_t *__attr)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Get the process-shared flag of the barrier attribute ATTR.  */
Packit Service 82fcde
extern int pthread_barrierattr_getpshared (const pthread_barrierattr_t *
Packit Service 82fcde
					   __restrict __attr,
Packit Service 82fcde
					   int *__restrict __pshared)
Packit Service 82fcde
     __THROW __nonnull ((1, 2));
Packit Service 82fcde
Packit Service 82fcde
/* Set the process-shared flag of the barrier attribute ATTR.  */
Packit Service 82fcde
extern int pthread_barrierattr_setpshared (pthread_barrierattr_t *__attr,
Packit Service 82fcde
					   int __pshared)
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Functions for handling thread-specific data.  */
Packit Service 82fcde
Packit Service 82fcde
/* Create a key value identifying a location in the thread-specific
Packit Service 82fcde
   data area.  Each thread maintains a distinct thread-specific data
Packit Service 82fcde
   area.  DESTR_FUNCTION, if non-NULL, is called with the value
Packit Service 82fcde
   associated to that key when the key is destroyed.
Packit Service 82fcde
   DESTR_FUNCTION is not called if the value associated is NULL when
Packit Service 82fcde
   the key is destroyed.  */
Packit Service 82fcde
extern int pthread_key_create (pthread_key_t *__key,
Packit Service 82fcde
			       void (*__destr_function) (void *))
Packit Service 82fcde
     __THROW __nonnull ((1));
Packit Service 82fcde
Packit Service 82fcde
/* Destroy KEY.  */
Packit Service 82fcde
extern int pthread_key_delete (pthread_key_t __key) __THROW;
Packit Service 82fcde
Packit Service 82fcde
/* Return current value of the thread-specific data slot identified by KEY.  */
Packit Service 82fcde
extern void *pthread_getspecific (pthread_key_t __key) __THROW;
Packit Service 82fcde
Packit Service 82fcde
/* Store POINTER in the thread-specific data slot identified by KEY. */
Packit Service 82fcde
extern int pthread_setspecific (pthread_key_t __key,
Packit Service 82fcde
				const void *__pointer) __THROW ;
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
#ifdef __USE_XOPEN2K
Packit Service 82fcde
/* Get ID of CPU-time clock for thread THREAD_ID.  */
Packit Service 82fcde
extern int pthread_getcpuclockid (pthread_t __thread_id,
Packit Service 82fcde
				  __clockid_t *__clock_id)
Packit Service 82fcde
     __THROW __nonnull ((2));
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Install handlers to be called when a new process is created with FORK.
Packit Service 82fcde
   The PREPARE handler is called in the parent process just before performing
Packit Service 82fcde
   FORK. The PARENT handler is called in the parent process just after FORK.
Packit Service 82fcde
   The CHILD handler is called in the child process.  Each of the three
Packit Service 82fcde
   handlers can be NULL, meaning that no handler needs to be called at that
Packit Service 82fcde
   point.
Packit Service 82fcde
   PTHREAD_ATFORK can be called several times, in which case the PREPARE
Packit Service 82fcde
   handlers are called in LIFO order (last added with PTHREAD_ATFORK,
Packit Service 82fcde
   first called before FORK), and the PARENT and CHILD handlers are called
Packit Service 82fcde
   in FIFO (first added, first called).  */
Packit Service 82fcde
Packit Service 82fcde
extern int pthread_atfork (void (*__prepare) (void),
Packit Service 82fcde
			   void (*__parent) (void),
Packit Service 82fcde
			   void (*__child) (void)) __THROW;
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
#ifdef __USE_EXTERN_INLINES
Packit Service 82fcde
/* Optimizations.  */
Packit Service 82fcde
__extern_inline int
Packit Service 82fcde
__NTH (pthread_equal (pthread_t __thread1, pthread_t __thread2))
Packit Service 82fcde
{
Packit Service 82fcde
  return __thread1 == __thread2;
Packit Service 82fcde
}
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
__END_DECLS
Packit Service 82fcde
Packit Service 82fcde
#endif	/* pthread.h */