aboutsummaryrefslogtreecommitdiff
path: root/linuxthreads/sysdeps/pthread
diff options
context:
space:
mode:
Diffstat (limited to 'linuxthreads/sysdeps/pthread')
-rw-r--r--linuxthreads/sysdeps/pthread/bits/pthreadtypes.h119
-rw-r--r--linuxthreads/sysdeps/pthread/pthread.h116
2 files changed, 134 insertions, 101 deletions
diff --git a/linuxthreads/sysdeps/pthread/bits/pthreadtypes.h b/linuxthreads/sysdeps/pthread/bits/pthreadtypes.h
new file mode 100644
index 0000000000..20b0bed311
--- /dev/null
+++ b/linuxthreads/sysdeps/pthread/bits/pthreadtypes.h
@@ -0,0 +1,119 @@
+/* Linuxthreads - a simple clone()-based implementation of Posix */
+/* threads for Linux. */
+/* Copyright (C) 1996 Xavier Leroy (Xavier.Leroy@inria.fr) */
+/* */
+/* This program 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. */
+/* */
+/* This program 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. */
+
+#if !defined _BITS_TYPES_H && !defined _PTHREAD_H
+# error "Never include <bits/pthreadtypes.h> directly; use <sys/types.h> instead."
+#endif
+
+#ifndef _BITS_PTHREADTYPES_H
+#define _BITS_PTHREADTYPES_H 1
+
+#define __need_schedparam
+#include <bits/sched.h>
+
+/* Fast locks (not abstract because mutexes and conditions aren't abstract). */
+struct _pthread_fastlock
+{
+ long int status; /* "Free" or "taken" or head of waiting list */
+ int spinlock; /* For compare-and-swap emulation */
+};
+
+/* Thread descriptors */
+typedef struct _pthread_descr_struct *_pthread_descr;
+
+
+/* Attributes for threads. */
+typedef struct
+{
+ int detachstate;
+ int schedpolicy;
+ struct __sched_param schedparam;
+ int inheritsched;
+ int scope;
+ size_t guardsize;
+ int stackaddr_set;
+ void *stackaddr;
+ size_t stacksize;
+} pthread_attr_t;
+
+
+/* Conditions (not abstract because of PTHREAD_COND_INITIALIZER */
+typedef struct
+{
+ struct _pthread_fastlock c_lock; /* Protect against concurrent access */
+ _pthread_descr c_waiting; /* Threads waiting on this condition */
+} pthread_cond_t;
+
+
+/* Attribute for conditionally variables. */
+typedef struct
+{
+ int dummy;
+} pthread_condattr_t;
+
+/* Keys for thread-specific data */
+typedef unsigned int pthread_key_t;
+
+
+/* Mutexes (not abstract because of PTHREAD_MUTEX_INITIALIZER). */
+/* (The layout is unnatural to maintain binary compatibility
+ with earlier releases of LinuxThreads.) */
+typedef struct
+{
+ int m_reserved; /* Reserved for future use */
+ int m_count; /* Depth of recursive locking */
+ _pthread_descr m_owner; /* Owner thread (if recursive or errcheck) */
+ int m_kind; /* Mutex kind: fast, recursive or errcheck */
+ struct _pthread_fastlock m_lock; /* Underlying fast lock */
+} pthread_mutex_t;
+
+
+/* Attribute for mutex. */
+typedef struct
+{
+ int mutexkind;
+} pthread_mutexattr_t;
+
+
+/* Once-only execution */
+typedef int pthread_once_t;
+
+
+#ifdef __USE_UNIX98
+/* Read-write locks. */
+typedef struct
+{
+ struct _pthread_fastlock rw_lock; /* Lock to guarantee mutual exclusion */
+ int rw_readers; /* Number of readers */
+ _pthread_descr rw_writer; /* Identity of writer, or NULL if none */
+ _pthread_descr rw_read_waiting; /* Threads waiting for reading */
+ _pthread_descr rw_write_waiting; /* Threads waiting for writing */
+ int rw_kind; /* Reader/Writer preference selection */
+ int rw_pshared; /* Shared between processes or not */
+} pthread_rwlock_t;
+
+
+/* Attribute for read-write locks. */
+typedef struct
+{
+ int lockkind;
+ int pshared;
+} pthread_rwlockattr_t;
+#endif
+
+
+/* Thread identifiers */
+typedef unsigned long int pthread_t;
+
+#endif /* bits/pthreadtypes.h */
diff --git a/linuxthreads/sysdeps/pthread/pthread.h b/linuxthreads/sysdeps/pthread/pthread.h
index 7e98123f43..1d402e6329 100644
--- a/linuxthreads/sysdeps/pthread/pthread.h
+++ b/linuxthreads/sysdeps/pthread/pthread.h
@@ -17,85 +17,34 @@
#include <features.h>
-#include <errno.h>
-#include <limits.h>
#include <sched.h>
-#include <unistd.h>
+#include <time.h>
#define __need_sigset_t
#include <signal.h>
-#define __need_timespec
-#include <time.h>
-
-/* Linux has no ENOTSUP error code. */
-#ifndef ENOTSUP
-#define ENOTSUP EOPNOTSUPP
-#endif
+#include <bits/pthreadtypes.h>
__BEGIN_DECLS
-/*** Types ***/
-
-/* Thread identifiers */
-typedef unsigned long int pthread_t;
-
-/* Thread descriptors */
-typedef struct _pthread_descr_struct *_pthread_descr;
-
-/* Fast locks (not abstract because mutexes and conditions aren't abstract). */
-struct _pthread_fastlock
-{
- long int status; /* "Free" or "taken" or head of waiting list */
- int spinlock; /* For compare-and-swap emulation */
-};
-
-/* Mutexes (not abstract because of PTHREAD_MUTEX_INITIALIZER). */
-/* (The layout is unnatural to maintain binary compatibility
- with earlier releases of LinuxThreads.) */
-
-typedef struct
-{
- int m_reserved; /* Reserved for future use */
- int m_count; /* Depth of recursive locking */
- _pthread_descr m_owner; /* Owner thread (if recursive or errcheck) */
- int m_kind; /* Mutex kind: fast, recursive or errcheck */
- struct _pthread_fastlock m_lock; /* Underlying fast lock */
-} pthread_mutex_t;
+/* Initializers. */
#define PTHREAD_MUTEX_INITIALIZER \
{0, 0, 0, PTHREAD_MUTEX_FAST_NP, {0, 0}}
-#define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \
+#ifdef __USE_GNU
+# define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \
{0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, {0, 0}}
-
-/* Conditions (not abstract because of PTHREAD_COND_INITIALIZER */
-typedef struct
-{
- struct _pthread_fastlock c_lock; /* Protect against concurrent access */
- _pthread_descr c_waiting; /* Threads waiting on this condition */
-} pthread_cond_t;
+#endif
#define PTHREAD_COND_INITIALIZER {{0, 0}, 0}
#ifdef __USE_UNIX98
-/* Read-write locks. */
-typedef struct
-{
- struct _pthread_fastlock rw_lock; /* Lock to guarantee mutual exclusion */
- int rw_readers; /* Number of readers */
- _pthread_descr rw_writer; /* Identity of writer, or NULL if none */
- _pthread_descr rw_read_waiting; /* Threads waiting for reading */
- _pthread_descr rw_write_waiting; /* Threads waiting for writing */
- int rw_kind; /* Reader/Writer preference selection */
- int rw_pshared; /* Shared between processes or not */
-} pthread_rwlock_t;
-
# define PTHREAD_RWLOCK_INITIALIZER \
{ {0, 0}, 0, NULL, NULL, NULL, \
PTHREAD_RWLOCK_DEFAULT_NP, PTHREAD_PROCESS_PRIVATE }
#endif
-/* Attributes */
+/* Values for attributes. */
enum
{
@@ -121,19 +70,6 @@ enum
#define PTHREAD_SCOPE_PROCESS PTHREAD_SCOPE_PROCESS
};
-typedef struct
-{
- int detachstate;
- int schedpolicy;
- struct sched_param schedparam;
- int inheritsched;
- int scope;
- size_t guardsize;
- int stackaddr_set;
- void *stackaddr;
- size_t stacksize;
-} pthread_attr_t;
-
enum
{
PTHREAD_MUTEX_FAST_NP,
@@ -148,46 +84,22 @@ enum
#endif
};
-typedef struct
-{
- int mutexkind;
-} pthread_mutexattr_t;
-
-typedef struct
-{
- int dummy;
-} pthread_condattr_t;
-
-#ifdef __USE_UNIX98
enum
{
PTHREAD_PROCESS_PRIVATE,
-# define PTHREAD_PROCESS_PRIVATE PTHREAD_PROCESS_PRIVATE
+#define PTHREAD_PROCESS_PRIVATE PTHREAD_PROCESS_PRIVATE
PTHREAD_PROCESS_SHARED
-# define PTHREAD_PROCESS_SHARED PTHREAD_PROCESS_SHARED
+#define PTHREAD_PROCESS_SHARED PTHREAD_PROCESS_SHARED
};
+#ifdef __USE_UNIX98
enum
{
PTHREAD_RWLOCK_PREFER_READER_NP,
PTHREAD_RWLOCK_PREFER_WRITER_NP,
PTHREAD_RWLOCK_DEFAULT_NP = PTHREAD_RWLOCK_PREFER_WRITER_NP
};
-
-typedef struct
-{
- int lockkind;
- int pshared;
-} pthread_rwlockattr_t;
-#endif
-
-/* Keys for thread-specific data */
-
-typedef unsigned int pthread_key_t;
-
-/* Once-only execution */
-
-typedef int pthread_once_t;
+#endif /* Unix98 */
#define PTHREAD_ONCE_INIT 0
@@ -592,7 +504,8 @@ extern void _pthread_cleanup_pop __P ((struct _pthread_cleanup_buffer *__buffer,
/* Install a cleanup handler as pthread_cleanup_push does, but also
saves the current cancellation type and set it to deferred cancellation. */
-#define pthread_cleanup_push_defer_np(routine,arg) \
+#ifdef __USE_GNU
+# define pthread_cleanup_push_defer_np(routine,arg) \
{ struct _pthread_cleanup_buffer _buffer; \
_pthread_cleanup_push_defer (&_buffer, (routine), (arg));
@@ -604,11 +517,12 @@ extern void _pthread_cleanup_push_defer __P ((struct _pthread_cleanup_buffer *__
restores the cancellation type that was in effect when the matching
pthread_cleanup_push_defer was called. */
-#define pthread_cleanup_pop_restore_np(execute) \
+# define pthread_cleanup_pop_restore_np(execute) \
_pthread_cleanup_pop_restore (&_buffer, (execute)); }
extern void _pthread_cleanup_pop_restore __P ((struct _pthread_cleanup_buffer *__buffer,
int __execute));
+#endif
/* Functions for handling signals. */