diff options
-rw-r--r-- | ChangeLog | 35 | ||||
-rw-r--r-- | include/pthread/pthread.h | 126 | ||||
-rw-r--r-- | include/pthread/pthreadtypes.h | 136 | ||||
-rw-r--r-- | sysdeps/generic/bits/barrier-attr.h | 2 | ||||
-rw-r--r-- | sysdeps/generic/bits/cancelation.h | 4 | ||||
-rw-r--r-- | sysdeps/generic/bits/condition-attr.h | 2 | ||||
-rw-r--r-- | sysdeps/generic/bits/mutex-attr.h | 4 | ||||
-rw-r--r-- | sysdeps/generic/bits/pthread.h | 6 | ||||
-rw-r--r-- | sysdeps/generic/bits/rwlock-attr.h | 2 | ||||
-rw-r--r-- | sysdeps/generic/bits/thread-attr.h | 4 |
10 files changed, 229 insertions, 92 deletions
@@ -1,5 +1,40 @@ 2008-06-27 Samuel Thibault <samuel.thibault@ens-lyon.org> + * include/pthread/pthread.h: Do not define __need_clockid_t, include + <time.h>, and define clockid_t if __clockid_defined is not defined. + Include <pthread/pthreadtypes.h> + (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 <samuel.thibault@ens-lyon.org> + * sysdeps/generic/bits/thread-barrier.h: Remove unused file. 2008-06-22 Neal H. Walfield <neal@gnu.org> diff --git a/include/pthread/pthread.h b/include/pthread/pthread.h index 88fa1dc..16450c7 100644 --- a/include/pthread/pthread.h +++ b/include/pthread/pthread.h @@ -26,66 +26,34 @@ #include <features.h> #include <sched.h> -#define __need_clockid_t -#include <time.h> - -/* If we are in a mode where clockid_t is not automatically defined - and another header has already included <time.h> then defining - __need_clockid_t was not enough. */ -#ifndef __clockid_t_defined -# define __clockid_t_defined 1 -# include <bits/types.h> -/* Clock ID used in clock and timer functions. */ -typedef __clockid_t clockid_t; -#endif __BEGIN_DECLS +#include <pthread/pthreadtypes.h> + #include <bits/pthread.h> /* 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 <bits/thread-attr.h> -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); @@ -220,47 +188,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 <bits/mutex-attr.h> -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); @@ -318,8 +287,6 @@ extern int pthread_mutexattr_settype(pthread_mutexattr_t *attr, #include <bits/mutex.h> -typedef struct __pthread_mutex pthread_mutex_t; - #define PTHREAD_MUTEX_INITIALIZER __PTHREAD_MUTEX_INITIALIZER /* Create a mutex with attributes given by ATTR and store it in @@ -364,8 +331,6 @@ extern int pthread_mutex_setprioceiling (pthread_mutex_t *__restrict mutex, #include <bits/condition-attr.h> -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); @@ -400,8 +365,6 @@ extern int pthread_condattr_setpshared (pthread_condattr_t *attr, #include <bits/condition.h> -typedef struct __pthread_cond pthread_cond_t; - #define PTHREAD_COND_INITIALIZER __PTHREAD_COND_INITIALIZER extern int pthread_cond_init (pthread_cond_t *__restrict cond, @@ -437,8 +400,6 @@ extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond, # include <bits/spin-lock.h> -typedef __pthread_spinlock_t pthread_spinlock_t; - #define PTHREAD_SPINLOCK_INITIALIZER __SPIN_LOCK_INITIALIZER /* Destroy the spin lock object LOCK. */ @@ -502,8 +463,6 @@ pthread_spin_unlock (pthread_spinlock_t *__lock) #include <bits/rwlock-attr.h> -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); @@ -527,8 +486,6 @@ extern int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *attr, #include <bits/rwlock.h> -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, @@ -580,6 +537,9 @@ extern void pthread_cleanup_pop (int execute); #include <bits/cancelation.h> +#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 @@ -611,8 +571,6 @@ extern void pthread_testcancel (void); #include <bits/barrier-attr.h> -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); @@ -636,8 +594,6 @@ extern int pthread_barrierattr_setpshared (pthread_barrierattr_t *attr, #include <bits/barrier.h> -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 @@ -661,8 +617,6 @@ extern int pthread_barrier_wait (pthread_barrier_t *barrier); #include <bits/thread-specific.h> -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. */ @@ -684,8 +638,6 @@ extern int pthread_setspecific (pthread_key_t key, const void *value); #include <bits/once.h> -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 diff --git a/include/pthread/pthreadtypes.h b/include/pthread/pthreadtypes.h new file mode 100644 index 0000000..690f1e4 --- /dev/null +++ b/include/pthread/pthreadtypes.h @@ -0,0 +1,136 @@ +/* Copyright (C) 2000, 2002, 2005 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 + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +/* + * POSIX Threads Extension: ??? <pthreadtypes.h> + */ + +#ifndef _PTHREADTYPES_H +#define _PTHREADTYPES_H 1 + +#include <features.h> + +#define __need_clockid_t +#include <time.h> + +/* If we are in a mode where clockid_t is not automatically defined + and another header has already included <time.h> then defining + __need_clockid_t was not enough. */ +#ifndef __clockid_t_defined +# define __clockid_t_defined 1 +# include <bits/types.h> +/* Clock ID used in clock and timer functions. */ +typedef __clockid_t clockid_t; +#endif + +__BEGIN_DECLS + +#include <bits/pthread.h> +typedef __pthread_t pthread_t; + +/* Possible values for the process shared attribute. */ +enum __pthread_process_shared + { + __PTHREAD_PROCESS_PRIVATE = 0, + __PTHREAD_PROCESS_SHARED + }; + +/* Possible values for the inheritsched attribute. */ +enum __pthread_inheritsched + { + __PTHREAD_EXPLICIT_SCHED = 0, + __PTHREAD_INHERIT_SCHED + }; + +/* Possible values for the `contentionscope' attribute. */ +enum __pthread_contentionscope + { + __PTHREAD_SCOPE_SYSTEM = 0, + __PTHREAD_SCOPE_PROCESS, + }; + +/* Possible values for the `detachstate' attribute. */ +enum __pthread_detachstate + { + __PTHREAD_CREATE_JOINABLE = 0, + __PTHREAD_CREATE_DETACHED + }; + +#include <bits/thread-attr.h> +typedef struct __pthread_attr pthread_attr_t; + +enum __pthread_mutex_protocol + { + __PTHREAD_PRIO_NONE= 0, + __PTHREAD_PRIO_INHERIT, + __PTHREAD_PRIO_PROTECT + }; + +enum __pthread_mutex_type + { + __PTHREAD_MUTEX_TIMED, + __PTHREAD_MUTEX_ERRORCHECK, + __PTHREAD_MUTEX_RECURSIVE + }; + +#include <bits/mutex-attr.h> +typedef struct __pthread_mutexattr pthread_mutexattr_t; + +#include <bits/mutex.h> +typedef struct __pthread_mutex pthread_mutex_t; + +#include <bits/condition-attr.h> +typedef struct __pthread_condattr pthread_condattr_t; + +#include <bits/condition.h> +typedef struct __pthread_cond pthread_cond_t; + +#ifdef __USE_XOPEN2K +# include <bits/spin-lock.h> +typedef __pthread_spinlock_t pthread_spinlock_t; +#endif /* XPG6. */ + +#if defined __USE_UNIX98 || defined __USE_XOPEN2K + +#include <bits/rwlock-attr.h> +typedef struct __pthread_rwlockattr pthread_rwlockattr_t; + +#include <bits/rwlock.h> +typedef struct __pthread_rwlock pthread_rwlock_t; + +#endif /* __USE_UNIX98 || __USE_XOPEN2K */ + +#ifdef __USE_XOPEN2K + +#include <bits/barrier-attr.h> +typedef struct __pthread_barrierattr pthread_barrierattr_t; + +#include <bits/barrier.h> +typedef struct __pthread_barrier pthread_barrier_t; + +#endif /* __USE_XOPEN2K */ + +#include <bits/thread-specific.h> +typedef __pthread_key pthread_key_t; + +#include <bits/once.h> +typedef struct __pthread_once pthread_once_t; + +__END_DECLS + +#endif /* pthreadtypes.h */ diff --git a/sysdeps/generic/bits/barrier-attr.h b/sysdeps/generic/bits/barrier-attr.h index 86f3cb0..d8d09db 100644 --- a/sysdeps/generic/bits/barrier-attr.h +++ b/sysdeps/generic/bits/barrier-attr.h @@ -20,6 +20,8 @@ #ifndef _BITS_BARRIER_ATTR_H #define _BITS_BARRIER_ATTR_H 1 +enum __pthread_process_shared; + /* This structure describes the attributes of a POSIX thread barrier. Note that not all of them are supported on all systems. */ struct __pthread_barrierattr diff --git a/sysdeps/generic/bits/cancelation.h b/sysdeps/generic/bits/cancelation.h index bb6b58a..f94b6e3 100644 --- a/sysdeps/generic/bits/cancelation.h +++ b/sysdeps/generic/bits/cancelation.h @@ -32,7 +32,7 @@ struct __pthread_cancelation_handler /* Returns the thread local location of the cleanup handler stack. */ struct __pthread_cancelation_handler **__pthread_get_cleanup_stack (void); -#define pthread_cleanup_push(rt, rtarg) \ +#define __pthread_cleanup_push(rt, rtarg) \ { \ struct __pthread_cancelation_handler **__handlers \ = __pthread_get_cleanup_stack (); \ @@ -44,7 +44,7 @@ struct __pthread_cancelation_handler **__pthread_get_cleanup_stack (void); }; \ *__handlers = &__handler; -#define pthread_cleanup_pop(execute) \ +#define __pthread_cleanup_pop(execute) \ if (execute) \ __handler.handler (__handler.arg); \ assert (*__handlers == &__handler); \ diff --git a/sysdeps/generic/bits/condition-attr.h b/sysdeps/generic/bits/condition-attr.h index 2d48dfb..49bbf7f 100644 --- a/sysdeps/generic/bits/condition-attr.h +++ b/sysdeps/generic/bits/condition-attr.h @@ -22,6 +22,8 @@ #include <time.h> +enum __pthread_process_shared; + /* User visible part of a condition attribute variable. */ struct __pthread_condattr { diff --git a/sysdeps/generic/bits/mutex-attr.h b/sysdeps/generic/bits/mutex-attr.h index 883b074..5d3d611 100644 --- a/sysdeps/generic/bits/mutex-attr.h +++ b/sysdeps/generic/bits/mutex-attr.h @@ -20,6 +20,10 @@ #ifndef _BITS_MUTEX_ATTR_H #define _BITS_MUTEX_ATTR_H 1 +enum __pthread_mutex_protocol; +enum __pthread_process_shared; +enum __pthread_mutex_type; + /* This structure describes the attributes of a POSIX mutex attribute. */ struct __pthread_mutexattr diff --git a/sysdeps/generic/bits/pthread.h b/sysdeps/generic/bits/pthread.h index 5e239d6..0e8ad9e 100644 --- a/sysdeps/generic/bits/pthread.h +++ b/sysdeps/generic/bits/pthread.h @@ -20,16 +20,16 @@ #ifndef _BITS_PTHREAD_H #define _BITS_PTHREAD_H 1 -typedef int pthread_t; +typedef int __pthread_t; /* Return true if __T1 and __T2 both name the same thread. Otherwise, false. */ extern int -pthread_equal (pthread_t __t1, pthread_t __t2); +__pthread_equal (__pthread_t __t1, __pthread_t __t2); #ifdef __USE_EXTERN_INLINES __extern_inline int -pthread_equal (pthread_t __t1, pthread_t __t2) +__pthread_equal (__pthread_t __t1, __pthread_t __t2) { return __t1 == __t2; } diff --git a/sysdeps/generic/bits/rwlock-attr.h b/sysdeps/generic/bits/rwlock-attr.h index 44765bd..b4f26c4 100644 --- a/sysdeps/generic/bits/rwlock-attr.h +++ b/sysdeps/generic/bits/rwlock-attr.h @@ -20,6 +20,8 @@ #ifndef _BITS_RWLOCK_ATTR_H #define _BITS_RWLOCK_ATTR_H 1 +enum __pthread_process_shared; + /* This structure describes the attributes of a POSIX thread rwlock. Note that not all of them are supported on all systems. */ struct __pthread_rwlockattr diff --git a/sysdeps/generic/bits/thread-attr.h b/sysdeps/generic/bits/thread-attr.h index 3163022..3250f51 100644 --- a/sysdeps/generic/bits/thread-attr.h +++ b/sysdeps/generic/bits/thread-attr.h @@ -22,6 +22,10 @@ #include <sched.h> +enum __pthread_detachstate; +enum __pthread_inheritsched; +enum __pthread_contentionscope; + /* This structure describes the attributes of a POSIX thread. Note that not all of them are supported on all systems. */ struct __pthread_attr |