From 6b49ed9f8754ad8dc5c45d707c2a89095b12f20d Mon Sep 17 00:00:00 2001 From: neal Date: Tue, 12 Aug 2008 13:03:03 +0000 Subject: 2008-08-12 Neal H. Walfield MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Merge in Samuel Thibault's changes from the main line. * Makefile.am (libpthread_a_SOURCES): Add pt-getattr.c. * headers.m4: Link libpthread/include/pthread/pthreadtypes.h to sysroot/include/pthread/pthreadtypes.h and libpthread/sysdeps/${arch}/bits/spin-lock-inline.h. to sysroot/include/bits/spin-lock-inline.h. * include/pthread/pthread.h: Include . (__extern_inline): If not defined, define appropriately. 2008-08-04 Samuel Thibault * include/pthread/pthreadtypes.h (__pthread_inheritsched): Remove comma at end of enumeration. 2008-08-03 Samuel Thibault * Makefile (sysdeps_headers): Add spin-lock-inline.h. (SYSDEP_PATH): Move sysdeps/ia32 right after sysdeps/$(MICROKERNEL)/ia32. * include/pthread/pthread.h: Include . * sysdeps/ia32/bits/spin-lock.h: Move inlines to... * sysdeps/ia32/bits/spin-lock-inline.h: ... new file. 2008-08-02 Samuel Thibault * sysdeps/generic/bits/mutex.h: Do not include and * sysdeps/ia32/bits/memory.h (__memory_barrier): Add memory clobber. * sysdeps/ia32/bits/spin-lock.h (__pthread_spin_trylock, __pthread_spin_unlock): Add memory clobbers. * sysdeps/l4/hurd/ia32/pt-setup.c (stack_setup): Fix reservation of stack room for initial frame. 2008-07-18 Samuel Thibault * Makefile (sysdeps_headers): add pthread/pthreadtypes.h 2008-06-27 Samuel Thibault * include/pthread/pthread.h: Do not define __need_clockid_t, include , and define clockid_t if __clockid_defined is not defined. Include (pthread_equal): New extern inline. (pthread_cleanup_push, pthread_cleanup_pop): New macros. (__pthread_process_shared, __pthread_inheritsched, __pthread_contentionscope, __pthread_detachstate, __pthread_mutex_protocol, __pthread_mutex_type, pthread_attr_t, pthread_mutex_attr_t, pthread_mutex_t, pthread_condattr_t, pthread_cond_t, pthread_spinlock_t, pthread_rwlockattr_t, pthread_rwlock_t, pthread_barrierattr_t, pthread_barrier_t, pthread_key_t, pthread_once_t): Move enums and typedefs to... * include/pthread/pthreadtypes.h: ... new file. * sysdeps/generic/bits/cancelation.h (pthread_cleanup_push): Rename macro to __pthread_cleanup_push. (pthread_cleanup_pop): Rename macro to __pthread_cleanup_pop. * sysdeps/generic/bits/barrier-attr.h (__pthread_process_shared): Forward-declare enum. * sysdeps/generic/bits/condition-attr.h (__pthread_process_shared): Likewise. * sysdeps/generic/bits/mutex-attr.h (__pthread_mutex_protocol, __pthread_process_shared, __pthread_mutex_type): Likewise. * sysdeps/generic/bits/rwlock-attr.h (__pthread_process_shared): Likewise. * sysdeps/generic/bits/thread-attr.h (__pthread_detachstate, __pthread_inheritsched, __pthread_contentionscope): Likewise. * sysdeps/generic/bits/pthread.h (pthread_t): Rename type to __pthread_t. (pthread_equal): Rename to __pthread_equal. 2008-06-27 Samuel Thibault * sysdeps/generic/bits/thread-barrier.h: Remove unused file. 2008-05-17 Samuel Thibault * include/pthread/pthread.h (pthread_getattr_np): New declaration. * pthread/pt-getattr.c: New file. * Makefile (SRCS): Add pt-getattr.c. 2008-03-16 Samuel Thibault * include/libc-symbols.h (HAVE_ASM_PREVIOUS_DIRECTIVE): Define. 2008-02-29 Samuel Thibault * sysdeps/l4/hurd/ia32/pt-setup.c (stack_setup): Align stack on 0x10 for MMX operations. 2008-01-01 Samuel Thibault * include/pthread/pthread.h (pthread_spin_destroy, pthread_spin_init, pthread_spin_lock, pthread_spin_trylock, pthread_spin_unlock): Use __extern_inline macro instead of extern __inline. * sysdeps/ia32/bits/spin-lock.h (__PT_SPIN_INLINE, __pthread_spin_lock): Likewise * sysdeps/generic/bits/pthread.h (pthread_equal): Declare ; only provide inline when __USE_EXTERN_INLINES is defined. Use __extern_inline macro instead of extern __inline. * sysdeps/ia32/bits/memory.h (__memory_barrier): Add static to inline. --- libpthread/include/pthread/pthread.h | 169 ++++++++++++++++------------------- 1 file changed, 76 insertions(+), 93 deletions(-) (limited to 'libpthread/include/pthread/pthread.h') diff --git a/libpthread/include/pthread/pthread.h b/libpthread/include/pthread/pthread.h index 7f69573..c6e056a 100644 --- a/libpthread/include/pthread/pthread.h +++ b/libpthread/include/pthread/pthread.h @@ -1,4 +1,5 @@ -/* Copyright (C) 2000, 2002, 2005, 2008 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2002, 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -25,67 +26,56 @@ #include -#include -#define __need_clockid_t -#include - -/* If we are in a mode where clockid_t is not automatically defined - and another header has already included then defining - __need_clockid_t was not enough. */ -#ifndef __clockid_t_defined -# define __clockid_t_defined 1 -# include -/* Clock ID used in clock and timer functions. */ -typedef __clockid_t clockid_t; +#include +#ifndef __extern_inline +/* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 + inline semantics, unless -fgnu89-inline is used. */ +# if !defined __cplusplus || __GNUC_PREREQ (4,3) +# if defined __GNUC_STDC_INLINE__ || defined __cplusplus +# define __extern_inline extern __inline __attribute__ ((__gnu_inline__)) +# if __GNUC_PREREQ (4,3) +# define __extern_always_inline \ + extern __always_inline __attribute__ ((__gnu_inline__, __artificial__)) +# else +# define __extern_always_inline \ + extern __always_inline __attribute__ ((__gnu_inline__)) +# endif +# else +# define __extern_inline extern __inline +# define __extern_always_inline extern __always_inline +# endif +# endif #endif +#include + __BEGIN_DECLS +#include + #include /* Possible values for the process shared attribute. */ -enum __pthread_process_shared - { - PTHREAD_PROCESS_PRIVATE = 0, -#define PTHREAD_PROCESS_PRIVATE 0 - PTHREAD_PROCESS_SHARED -#define PTHREAD_PROCESS_SHARED 1 - }; +#define PTHREAD_PROCESS_PRIVATE __PTHREAD_PROCESS_PRIVATE +#define PTHREAD_PROCESS_SHARED __PTHREAD_PROCESS_SHARED /* Thread attributes. */ /* Possible values for the inheritsched attribute. */ -enum __pthread_inheritsched - { - PTHREAD_EXPLICIT_SCHED = 0, -#define PTHREAD_EXPLICIT_SCHED 0 - PTHREAD_INHERIT_SCHED -#define PTHREAD_INHERIT_SCHED 1 - }; +#define PTHREAD_EXPLICIT_SCHED __PTHREAD_EXPLICIT_SCHED +#define PTHREAD_INHERIT_SCHED __PTHREAD_INHERIT_SCHED /* Possible values for the `contentionscope' attribute. */ -enum __pthread_contentionscope - { - PTHREAD_SCOPE_SYSTEM = 0, -#define PTHREAD_SCOPE_SYSTEM 0 - PTHREAD_SCOPE_PROCESS, -#define PTHREAD_SCOPE_PROCESS 1 - }; +#define PTHREAD_SCOPE_SYSTEM __PTHREAD_SCOPE_SYSTEM +#define PTHREAD_SCOPE_PROCESS __PTHREAD_SCOPE_PROCESS /* Possible values for the `detachstate' attribute. */ -enum __pthread_detachstate - { - PTHREAD_CREATE_JOINABLE = 0, -#define PTHREAD_CREATE_JOINABLE 0 - PTHREAD_CREATE_DETACHED -#define PTHREAD_CREATE_DETACHED 1 - }; +#define PTHREAD_CREATE_JOINABLE __PTHREAD_CREATE_JOINABLE +#define PTHREAD_CREATE_DETACHED __PTHREAD_CREATE_DETACHED #include -typedef struct __pthread_attr pthread_attr_t; - /* Initialize the thread attribute object in *ATTR to the default values. */ extern int pthread_attr_init (pthread_attr_t *attr); @@ -188,6 +178,13 @@ extern int pthread_attr_getstacksize (const pthread_attr_t *__restrict attr, /* Set the value of the stacksize attribute in *ATTR to STACKSIZE. */ extern int pthread_attr_setstacksize (pthread_attr_t *attr, size_t stacksize); + +#ifdef __USE_GNU +/* Initialize thread attribute *ATTR with attributes corresponding to the + already running thread THREAD. It shall be called on an uninitialized ATTR + and destroyed with pthread_attr_destroy when no longer needed. */ +extern int pthread_getattr_np (pthread_t thread, pthread_attr_t *attr); +#endif /* Create a thread with attributes given by ATTR, executing @@ -213,47 +210,48 @@ extern int pthread_detach (pthread_t __threadp); if they are not. */ extern int pthread_equal (pthread_t __t1, pthread_t __t2); +# ifdef __USE_EXTERN_INLINES + +__extern_inline int +pthread_equal (pthread_t __t1, pthread_t __t2) +{ + return __pthread_equal (__t1, __t2); +} + +# endif /* Use extern inlines. */ + + /* Return the thread ID of the calling thread. */ extern pthread_t pthread_self (void); /* Mutex attributes. */ -enum __pthread_mutex_protocol - { - PTHREAD_PRIO_NONE_NP = 0, - PTHREAD_PRIO_INHERIT_NP, - PTHREAD_PRIO_PROTECT_NP +#define PTHREAD_PRIO_NONE_NP __PTHREAD_PRIO_NONE +#define PTHREAD_PRIO_INHERIT_NP __PTHREAD_PRIO_INHERIT +#define PTHREAD_PRIO_PROTECT_NP __PTHREAD_PRIO_PROTECT #ifdef __USE_UNIX98 - , - PTHREAD_PRIO_NONE = PTHREAD_PRIO_NONE_NP, - PTHREAD_PRIO_INHERIT = PTHREAD_PRIO_INHERIT_NP, - PTHREAD_PRIO_PROTECT = PTHREAD_PRIO_PROTECT_NP +#define PTHREAD_PRIO_NONE PTHREAD_PRIO_NONE_NP +#define PTHREAD_PRIO_INHERIT PTHREAD_PRIO_INHERIT_NP +#define PTHREAD_PRIO_PROTECT PTHREAD_PRIO_PROTECT_NP #endif - }; -enum __pthread_mutex_type - { - PTHREAD_MUTEX_TIMED_NP = 0, - PTHREAD_MUTEX_ERRORCHECK_NP, - PTHREAD_MUTEX_RECURSIVE_NP +#define PTHREAD_MUTEX_TIMED_NP __PTHREAD_MUTEX_TIMED +#define PTHREAD_MUTEX_ERRORCHECK_NP __PTHREAD_MUTEX_ERRORCHECK +#define PTHREAD_MUTEX_RECURSIVE_NP __PTHREAD_MUTEX_RECURSIVE #ifdef __USE_UNIX98 - , - PTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_TIMED_NP, - PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP, - PTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP, - PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL +#define PTHREAD_MUTEX_NORMAL PTHREAD_MUTEX_TIMED_NP +#define PTHREAD_MUTEX_ERRORCHECK PTHREAD_MUTEX_ERRORCHECK_NP +#define PTHREAD_MUTEX_RECURSIVE PTHREAD_MUTEX_RECURSIVE_NP +#define PTHREAD_MUTEX_DEFAULT PTHREAD_MUTEX_NORMAL #endif #ifdef __USE_GNU - /* For compatibility. */ - , PTHREAD_MUTEX_FAST_NP = PTHREAD_MUTEX_TIMED_NP +/* For compatibility. */ +#define PTHREAD_MUTEX_FAST_NP PTHREAD_MUTEX_TIMED_NP #endif - }; #include -typedef struct __pthread_mutexattr pthread_mutexattr_t; - /* Initialize the mutex attribute object in *ATTR to the default values. */ extern int pthread_mutexattr_init(pthread_mutexattr_t *attr); @@ -311,8 +309,6 @@ extern int pthread_mutexattr_settype(pthread_mutexattr_t *attr, #include -typedef struct __pthread_mutex pthread_mutex_t; - #define PTHREAD_MUTEX_INITIALIZER __PTHREAD_MUTEX_INITIALIZER /* Static initializer for recursive mutexes. */ #define PTHREAD_MUTEX_RECURSIVE_INITIALIZER_NP \ @@ -365,8 +361,6 @@ extern int pthread_mutex_setprioceiling (pthread_mutex_t *__restrict mutex, #include -typedef struct __pthread_condattr pthread_condattr_t; - /* Initialize the condition attribute in *ATTR to the default values. */ extern int pthread_condattr_init (pthread_condattr_t *attr); @@ -401,8 +395,6 @@ extern int pthread_condattr_setpshared (pthread_condattr_t *attr, #include -typedef struct __pthread_cond pthread_cond_t; - #define PTHREAD_COND_INITIALIZER __PTHREAD_COND_INITIALIZER extern int pthread_cond_init (pthread_cond_t *__restrict cond, @@ -438,8 +430,6 @@ extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond, # include -typedef __pthread_spinlock_t pthread_spinlock_t; - #define PTHREAD_SPINLOCK_INITIALIZER __SPIN_LOCK_INITIALIZER /* Destroy the spin lock object LOCK. */ @@ -462,31 +452,33 @@ extern int pthread_spin_unlock (pthread_spinlock_t *__lock); # ifdef __USE_EXTERN_INLINES -extern __inline int +# include + +__extern_inline int pthread_spin_destroy (pthread_spinlock_t *__lock) { return __pthread_spin_destroy (__lock); } -extern __inline int +__extern_inline int pthread_spin_init (pthread_spinlock_t *__lock, int __pshared) { return __pthread_spin_init (__lock, __pshared); } -extern __inline int +__extern_inline int pthread_spin_lock (pthread_spinlock_t *__lock) { return __pthread_spin_lock (__lock); } -extern __inline int +__extern_inline int pthread_spin_trylock (pthread_spinlock_t *__lock) { return __pthread_spin_trylock (__lock); } -extern __inline int +__extern_inline int pthread_spin_unlock (pthread_spinlock_t *__lock) { return __pthread_spin_unlock (__lock); @@ -503,8 +495,6 @@ pthread_spin_unlock (pthread_spinlock_t *__lock) #include -typedef struct __pthread_rwlockattr pthread_rwlockattr_t; - /* Initialize rwlock attribute object in *ATTR to the default values. */ extern int pthread_rwlockattr_init (pthread_rwlockattr_t *attr); @@ -528,8 +518,6 @@ extern int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *attr, #include -typedef struct __pthread_rwlock pthread_rwlock_t; - /* Create a rwlock object with attributes given by ATTR and strore the result in *RWLOCK. */ extern int pthread_rwlock_init (pthread_rwlock_t *__restrict rwlock, @@ -581,6 +569,9 @@ extern void pthread_cleanup_pop (int execute); #include +#define pthread_cleanup_push(rt, rtarg) __pthread_cleanup_push(rt, rtarg) +#define pthread_cleanup_pop(execute) __pthread_cleanup_pop(execute) + #define PTHREAD_CANCEL_DISABLE 0 #define PTHREAD_CANCEL_ENABLE 1 @@ -612,8 +603,6 @@ extern void pthread_testcancel (void); #include -typedef struct __pthread_barrierattr pthread_barrierattr_t; - /* Initialize barrier attribute object in *ATTR to the default values. */ extern int pthread_barrierattr_init (pthread_barrierattr_t *attr); @@ -637,8 +626,6 @@ extern int pthread_barrierattr_setpshared (pthread_barrierattr_t *attr, #include -typedef struct __pthread_barrier pthread_barrier_t; - /* Returned by pthread_barrier_wait to exactly one thread each time a barrier is passed. */ #define PTHREAD_BARRIER_SERIAL_THREAD -1 @@ -662,8 +649,6 @@ extern int pthread_barrier_wait (pthread_barrier_t *barrier); #include -typedef __pthread_key pthread_key_t; - /* Create a thread specific data key in KEY visible to all threads. On thread destruction, DESTRUCTOR shall be called with the thread specific data associate with KEY if it is not NULL. */ @@ -685,8 +670,6 @@ extern int pthread_setspecific (pthread_key_t key, const void *value); #include -typedef struct __pthread_once pthread_once_t; - #define PTHREAD_ONCE_INIT __PTHREAD_ONCE_INIT /* Call INIT_ROUTINE if this function has never been called with -- cgit v1.2.3