mirror of
https://sourceware.org/git/glibc.git
synced 2025-12-24 17:51:17 +03:00
2.5-18.1
This commit is contained in:
103
nptl/pthreadP.h
103
nptl/pthreadP.h
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2002,2003,2004,2005,2006,2007 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
#include <internaltypes.h>
|
||||
#include <pthread-functions.h>
|
||||
#include <atomic.h>
|
||||
#include <kernel-features.h>
|
||||
|
||||
|
||||
/* Atomic operations on TLS memory. */
|
||||
@@ -51,6 +52,78 @@
|
||||
#endif
|
||||
|
||||
|
||||
/* Magic cookie representing robust mutex with dead owner. */
|
||||
#define PTHREAD_MUTEX_INCONSISTENT INT_MAX
|
||||
/* Magic cookie representing not recoverable robust mutex. */
|
||||
#define PTHREAD_MUTEX_NOTRECOVERABLE (INT_MAX - 1)
|
||||
|
||||
|
||||
/* Internal mutex type value. */
|
||||
enum
|
||||
{
|
||||
PTHREAD_MUTEX_KIND_MASK_NP = 3,
|
||||
PTHREAD_MUTEX_ROBUST_NORMAL_NP = 16,
|
||||
PTHREAD_MUTEX_ROBUST_RECURSIVE_NP
|
||||
= PTHREAD_MUTEX_ROBUST_NORMAL_NP | PTHREAD_MUTEX_RECURSIVE_NP,
|
||||
PTHREAD_MUTEX_ROBUST_ERRORCHECK_NP
|
||||
= PTHREAD_MUTEX_ROBUST_NORMAL_NP | PTHREAD_MUTEX_ERRORCHECK_NP,
|
||||
PTHREAD_MUTEX_ROBUST_ADAPTIVE_NP
|
||||
= PTHREAD_MUTEX_ROBUST_NORMAL_NP | PTHREAD_MUTEX_ADAPTIVE_NP,
|
||||
PTHREAD_MUTEX_PRIO_INHERIT_NP = 32,
|
||||
PTHREAD_MUTEX_PI_NORMAL_NP
|
||||
= PTHREAD_MUTEX_PRIO_INHERIT_NP | PTHREAD_MUTEX_NORMAL,
|
||||
PTHREAD_MUTEX_PI_RECURSIVE_NP
|
||||
= PTHREAD_MUTEX_PRIO_INHERIT_NP | PTHREAD_MUTEX_RECURSIVE_NP,
|
||||
PTHREAD_MUTEX_PI_ERRORCHECK_NP
|
||||
= PTHREAD_MUTEX_PRIO_INHERIT_NP | PTHREAD_MUTEX_ERRORCHECK_NP,
|
||||
PTHREAD_MUTEX_PI_ADAPTIVE_NP
|
||||
= PTHREAD_MUTEX_PRIO_INHERIT_NP | PTHREAD_MUTEX_ADAPTIVE_NP,
|
||||
PTHREAD_MUTEX_PI_ROBUST_NORMAL_NP
|
||||
= PTHREAD_MUTEX_PRIO_INHERIT_NP | PTHREAD_MUTEX_ROBUST_NORMAL_NP,
|
||||
PTHREAD_MUTEX_PI_ROBUST_RECURSIVE_NP
|
||||
= PTHREAD_MUTEX_PRIO_INHERIT_NP | PTHREAD_MUTEX_ROBUST_RECURSIVE_NP,
|
||||
PTHREAD_MUTEX_PI_ROBUST_ERRORCHECK_NP
|
||||
= PTHREAD_MUTEX_PRIO_INHERIT_NP | PTHREAD_MUTEX_ROBUST_ERRORCHECK_NP,
|
||||
PTHREAD_MUTEX_PI_ROBUST_ADAPTIVE_NP
|
||||
= PTHREAD_MUTEX_PRIO_INHERIT_NP | PTHREAD_MUTEX_ROBUST_ADAPTIVE_NP,
|
||||
PTHREAD_MUTEX_PRIO_PROTECT_NP = 64,
|
||||
PTHREAD_MUTEX_PP_NORMAL_NP
|
||||
= PTHREAD_MUTEX_PRIO_PROTECT_NP | PTHREAD_MUTEX_NORMAL,
|
||||
PTHREAD_MUTEX_PP_RECURSIVE_NP
|
||||
= PTHREAD_MUTEX_PRIO_PROTECT_NP | PTHREAD_MUTEX_RECURSIVE_NP,
|
||||
PTHREAD_MUTEX_PP_ERRORCHECK_NP
|
||||
= PTHREAD_MUTEX_PRIO_PROTECT_NP | PTHREAD_MUTEX_ERRORCHECK_NP,
|
||||
PTHREAD_MUTEX_PP_ADAPTIVE_NP
|
||||
= PTHREAD_MUTEX_PRIO_PROTECT_NP | PTHREAD_MUTEX_ADAPTIVE_NP
|
||||
};
|
||||
|
||||
/* Ceiling in __data.__lock. __data.__lock is signed, so don't
|
||||
use the MSB bit in there, but in the mask also include that bit,
|
||||
so that the compiler can optimize & PTHREAD_MUTEX_PRIO_CEILING_MASK
|
||||
masking if the value is then shifted down by
|
||||
PTHREAD_MUTEX_PRIO_CEILING_SHIFT. */
|
||||
#define PTHREAD_MUTEX_PRIO_CEILING_SHIFT 19
|
||||
#define PTHREAD_MUTEX_PRIO_CEILING_MASK 0xfff80000
|
||||
|
||||
|
||||
/* Flags in mutex attr. */
|
||||
#define PTHREAD_MUTEXATTR_PROTOCOL_SHIFT 28
|
||||
#define PTHREAD_MUTEXATTR_PROTOCOL_MASK 0x30000000
|
||||
#define PTHREAD_MUTEXATTR_PRIO_CEILING_SHIFT 12
|
||||
#define PTHREAD_MUTEXATTR_PRIO_CEILING_MASK 0x00fff000
|
||||
#define PTHREAD_MUTEXATTR_FLAG_ROBUST 0x40000000
|
||||
#define PTHREAD_MUTEXATTR_FLAG_PSHARED 0x80000000
|
||||
#define PTHREAD_MUTEXATTR_FLAG_BITS \
|
||||
(PTHREAD_MUTEXATTR_FLAG_ROBUST | PTHREAD_MUTEXATTR_FLAG_PSHARED \
|
||||
| PTHREAD_MUTEXATTR_PROTOCOL_MASK | PTHREAD_MUTEXATTR_PRIO_CEILING_MASK)
|
||||
|
||||
|
||||
/* Bits used in robust mutex implementation. */
|
||||
#define FUTEX_WAITERS 0x80000000
|
||||
#define FUTEX_OWNER_DIED 0x40000000
|
||||
#define FUTEX_TID_MASK 0x3fffffff
|
||||
|
||||
|
||||
/* Internal variables. */
|
||||
|
||||
|
||||
@@ -87,6 +160,19 @@ hidden_proto (__pthread_keys)
|
||||
/* Number of threads running. */
|
||||
extern unsigned int __nptl_nthreads attribute_hidden;
|
||||
|
||||
#ifndef __ASSUME_SET_ROBUST_LIST
|
||||
/* Negative if we do not have the system call and we can use it. */
|
||||
extern int __set_robust_list_avail attribute_hidden;
|
||||
#endif
|
||||
|
||||
/* Thread Priority Protection. */
|
||||
extern int __sched_fifo_min_prio attribute_hidden;
|
||||
extern int __sched_fifo_max_prio attribute_hidden;
|
||||
extern void __init_sched_fifo_prio (void) attribute_hidden;
|
||||
extern int __pthread_tpp_change_priority (int prev_prio, int new_prio)
|
||||
attribute_hidden;
|
||||
extern int __pthread_current_priority (void) attribute_hidden;
|
||||
|
||||
/* The library can run in debugging mode where it performs a lot more
|
||||
tests. */
|
||||
extern int __pthread_debug attribute_hidden;
|
||||
@@ -457,10 +543,25 @@ extern void __nptl_deallocate_tsd (void) attribute_hidden;
|
||||
|
||||
extern int __nptl_setxid (struct xid_command *cmdp) attribute_hidden;
|
||||
|
||||
extern void __free_stack_cache (void) attribute_hidden;
|
||||
|
||||
extern void __wait_lookup_done (void) attribute_hidden;
|
||||
|
||||
#ifdef SHARED
|
||||
# define PTHREAD_STATIC_FN_REQUIRE(name)
|
||||
#else
|
||||
# define PTHREAD_STATIC_FN_REQUIRE(name) __asm (".globl " #name);
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef __NR_set_robust_list
|
||||
/* XXX For the time being... Once we can rely on the kernel headers
|
||||
having the definition remove these lines. */
|
||||
# if defined __i386__
|
||||
# define __NR_set_robust_list 311
|
||||
# elif defined __x86_64__
|
||||
# define __NR_set_robust_list 273
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#endif /* pthreadP.h */
|
||||
|
||||
Reference in New Issue
Block a user