Index: ossp-pkg/pth/ChangeLog RCS File: /v/ossp/cvs/ossp-pkg/pth/ChangeLog,v rcsdiff -q -kk '-r1.534' '-r1.535' -u '/v/ossp/cvs/ossp-pkg/pth/ChangeLog,v' 2>/dev/null --- ChangeLog 2000/10/05 12:28:19 1.534 +++ ChangeLog 2001/01/01 12:51:08 1.535 @@ -21,6 +21,10 @@ Changes between 1.4a3 and 1.4a4 (29-Jul-2000 to xx-Oct-2000) + *) Added `#define _BITS_SIGTHREAD_H' to pthread.h to avoid inclusion + of bits/sigthread.h (from signal.h) on Linux running glibc6 2.2. + [Tomas Pihl ] + *) Added support to Makefile.in for DESTDIR variable. This allows easier rolling of installation tarballs (for instance from within RPM or similar facilities) by using "make install DESTDIR=/tmp/pth". Index: ossp-pkg/pth/PORTING RCS File: /v/ossp/cvs/ossp-pkg/pth/PORTING,v rcsdiff -q -kk '-r1.181' '-r1.182' -u '/v/ossp/cvs/ossp-pkg/pth/PORTING,v' 2>/dev/null --- PORTING 2000/10/05 12:28:06 1.181 +++ PORTING 2001/01/01 12:51:08 1.182 @@ -20,6 +20,7 @@ i686-pc-freebsd3.1 | sjlj/ssjlj/sas | down | 1.3.0 i586-pc-freebsd3.2 | sjlj/ssjlj/sas | down | 1.2.0 i686-pc-freebsd3.2 | sjlj/ssjlj/sas | down | 1.3.5 + i386-pc-freebsd3.2 | sjlj/ssjlj/sas | down | 1.3.7 i386-pc-freebsd3.3 | sjlj/ssjlj/sas | down | 1.2.1 i486-pc-freebsd3.3 | sjlj/ssjlj/sas | down | 1.2.1 i586-pc-freebsd3.3 | sjlj/ssjlj/sas | down | 1.3a5 @@ -32,6 +33,8 @@ i586-pc-freebsd4.1 | sjlj/ssjlj/sas | down | 1.3.7 i686-pc-freebsd4.1 | sjlj/ssjlj/sas | down | 1.4a3 i686-pc-freebsd4.1.1 | sjlj/ssjlj/sas | down | 1.4a4 [DEV] + i686-pc-freebsd4.1.1 | sjlj/ssjlj/sas | down | 1.3.7 + i686-pc-freebsd4.2 | sjlj/ssjlj/sas | down | 1.3.7 i586-pc-freebsd5.0 | sjlj/ssjlj/sas | down | 1.3.4 alpha-unknown-freebsd4.0 | sjlj/ssjlj/sas | down | 1.3.0 alpha-unknown-freebsd5.0 | sjlj/ssjlj/sas | down | 1.3.5 @@ -49,11 +52,17 @@ i386-unknown-netbsd1.4.2 | sjlj/ssjlj/sas | down | 1.4a2 alpha-unknown-netbsd1.3.3 | sjlj/ssjlj/sas | down | 1.1.4 i386-unknown-netbsd1.3.3 | sjlj/ssjlj/sas | down | 1.1.5 + m68k-apple-netbsd1.3.3 | sjlj/ssjlj/sas | down | 1.3.7 + mips-dec-netbsd1.5 | sjlj/ssjlj/sas | down | 1.3.7 + sparc--netbsd | sjlj/ssjlj/sas | down | 1.3.7 + alpha-unknown-netbsd1.5.1 | sjlj/ssjlj/sas | down | 1.4a2 i386-unknown-openbsd2.5 | sjlj/ssjlj/sas | down | 1.2b5 sparc-unknown-openbsd2.6 | sjlj/ssjlj/sas | down | 1.2.0 i386-unknown-openbsd2.6 | sjlj/ssjlj/sas | down | 1.2.1 i386-unknown-openbsd2.7 | sjlj/ssjlj/sas | down | 1.3.7 + i386-unknown-openbsd2.8 | sjlj/ssjlj/sas | down | 1.4a2 i386-pc-bsdi4.0 | sjlj/ssjlj/sas | down | 1.3.3 + i386-pc-bsdi4.1 | sjlj/ssjlj/sas | down | 1.3.7 armv4l-unknown-linux-gnu | sjlj/ssjlj/sas | down | 1.2b8 i586-redhat-linux-gnu2.0glibc2.0 | sjlj/sjljlx/none | down | 1.3.0 i586-redhat-linux-gnu2.2glibc2.0 | sjlj/sjljlx/none | down | 1.3a2 @@ -64,10 +73,18 @@ i586-redhat-linux-gnu2.2glibc2.1 | sjlj/ssjlj/sas | down | 1.3.1 i686-redhat-linux-gnu2.2glibc2.1 | sjlj/ssjlj/sas | down | 1.3.3 i486-redhat-linux-gnu2.2glibc2.1 | sjlj/ssjlj/sas | down | 1.3.5 + i586-redhat-linux-gnu2.2glibc1 | sjlj/ssjlj/sas | down | 1.3.7 + i586-redhat-linux-gnu2.2glibc2.2 | sjlj/ssjlj/sas | down | 1.3.7 + i686-redhat-linux-gnu2.2glibc2.2 | sjlj/ssjlj/sas | down | 1.3.7 + i686-redhat-linux-gnu2.4glibc2.2 | sjlj/ssjlj/sas | down | 1.3.7 + powerpc-redhat-linux-gnu2.2glibc2.1 | sjlj/ssjlj/sas | down | 1.3.7 + i586-suse-linux-gnu2.2glibc2.0 | sjlj/sjljlx/none | down | 1.3.7 i686-suse-linux-gnu2.2glibc2.0 | sjlj/sjljlx/none | down | 1.3.1 i586-suse-linux-gnu2.2glibc2.1 | sjlj/ssjlj/sas | down | 1.3.2 i686-suse-linux-gnu2.2glibc2.1 | sjlj/ssjlj/sas | down | 1.3.2 i686-suse-linux-gnu2.2glibc2.1 | sjlj/ssjlj/sas | down | 1.3.2 + i486-gnu-linux-gnu2.0glibc1 | sjlj/sjljlx/none | down | 1.3.7 + i586-gnu-linux-gnu2.4glibc2.1 | sjlj/ssjlj/sas | down | 1.3.7 i586-gnu-linux-gnu2.0glibc1 | sjlj/sjljlx/none | down | 1.3.1 i586-gnu-linux-gnu2.2glibc1 | sjlj/sjljlx/none | down | 1.3.1 i686-gnu-linux-gnu2.2glibc1 | sjlj/sjljlx/none | down | 1.3.5 @@ -103,6 +120,7 @@ sparc-sun-solaris2.6 | mcsc/sc/mc | down | 1.3.0 sparc-sun-solaris2.5 | mcsc/sc/mc | down | 1.1.4 sparc-sun-solaris2.5.1 | mcsc/sc/mc | down | 1.2.0 + sparc-sun-solaris2.8 | mcsc/sc/mc | down | 1.3.2 sparc-sun-sunos4.1.3_U1 | sjlj/ssjlj/ss | down | 1.1.4 sparc-sun-sunos4.1.4 | sjlj/ssjlj/ss | down | 1.1.6 i386-pc-sysv5uw7 | mcsc/sc/mc | down | 1.3.0 @@ -125,6 +143,7 @@ powerpc-ibm-aix4.3.2.0 | mcsc/sc/mc | down | 1.2.1 rs6000-ibm-aix4.3.3.0 | mcsc/sc/mc | down | 1.3.5 powerpc-ibm-aix4.3.3.0 | mcsc/sc/mc | down | 1.3.5 + rs6000-ibm-aix4.2.0.0 | mcsc/sc/mc | down | 1.3.7 m68k-hp-hpux9.10 | sjlj/ssjlj/ss | down | 1.2.0 hppa1.1-hp-hpux10.01 | sjlj/ssjlj/ss | up | 1.3.3 hppa1.1-hp-hpux10.10 | sjlj/ssjlj/sas | up | 1.3.7 @@ -135,7 +154,7 @@ hppa2.0w-hp-hpux11.00 | mcsc/sc/mc | up | 1.4a1 mips-sgi-irix5.3 | sjlj/ssjlj/sas | down | 1.2.2 mips-sgi-irix6.5 | mcsc/sc/mc | down | 1.2b1 - mips-sgi-irix6.2 | mcsc/sc/mc | down | 1.3.0 + mips-sgi-irix6.3 | mcsc/sc/mc | down | 1.3.7 i386-pc-isc4.0 | sjlj/sjljisc/none | down | 1.2b2 powerpc-apple-rhapsody5.5 | sjlj/ssjlj/sas | down | 1.2b3 powerpc-apple-netbsd1.4.1 | sjlj/ssjlj/sas | down | 1.2.1 Index: ossp-pkg/pth/THANKS RCS File: /v/ossp/cvs/ossp-pkg/pth/THANKS,v rcsdiff -q -kk '-r1.76' '-r1.77' -u '/v/ossp/cvs/ossp-pkg/pth/THANKS,v' 2>/dev/null --- THANKS 2000/09/30 08:00:17 1.76 +++ THANKS 2001/01/01 12:51:08 1.77 @@ -69,6 +69,7 @@ o Kent Overstreet o Pete o Michael Petuschak + o Tomas Pihl o Rob Quinn o Matthew Quon o Peter Reich Index: ossp-pkg/pth/pthread.h.in RCS File: /v/ossp/cvs/ossp-pkg/pth/pthread.h.in,v co -q -kk -p'1.54' '/v/ossp/cvs/ossp-pkg/pth/pthread.h.in,v' | diff -u /dev/null - -L'ossp-pkg/pth/pthread.h.in' 2>/dev/null --- ossp-pkg/pth/pthread.h.in +++ - 2024-05-17 04:54:46.954468526 +0200 @@ -0,0 +1,555 @@ +/* +** GNU Pth - The GNU Portable Threads +** Copyright (c) 1999-2000 Ralf S. Engelschall +** +** This file is part of GNU Pth, a non-preemptive thread scheduling +** library which can be found at http://www.gnu.org/software/pth/. +** +** This library is free software; you can redistribute it and/or +** modify it under the terms of the GNU Lesser General Public +** License as published by the Free Software Foundation; either +** version 2.1 of the License, or (at your option) any later version. +** +** This 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 +** Lesser General Public License for more details. +** +** You should have received a copy of the GNU Lesser General Public +** License along with this library; if not, write to the Free Software +** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +** USA, or contact Ralf S. Engelschall . +** +** pthread.h: POSIX Thread ("Pthread") API for Pth +*/ + /* ``Only those who attempt the absurd + can achieve the impossible.'' + -- Unknown */ +#ifndef _PTH_PTHREAD_H_ +#define _PTH_PTHREAD_H_ + +/* +** +** BOOTSTRAPPING +** +*/ + +/* + * Prevent system includes from implicitly including + * possibly existing vendor Pthread headers + */ +#define PTHREAD +#define PTHREAD_H +#define _PTHREAD_H +#define _PTHREAD_H_ +#define PTHREAD_INCLUDED +#define _PTHREAD_INCLUDED +#define SYS_PTHREAD_H +#define _SYS_PTHREAD_H +#define _SYS_PTHREAD_H_ +#define SYS_PTHREAD_INCLUDED +#define _SYS_PTHREAD_INCLUDED +#define BITS_PTHREADTYPES_H +#define _BITS_PTHREADTYPES_H +#define _BITS_PTHREADTYPES_H_ +#define _BITS_SIGTHREAD_H + +/* + * Special adjustments + */ +#if defined(__hpux) +#define _PTHREADS_DRAFT4 +#endif + +/* + * Protect namespace, because possibly existing vendor Pthread stuff + * would certainly conflict with our defintions of pthread*_t. + */ +#define pthread_t __vendor_pthread_t +#define pthread_attr_t __vendor_pthread_attr_t +#define pthread_key_t __vendor_pthread_key_t +#define pthread_once_t __vendor_pthread_once_t +#define pthread_mutex_t __vendor_pthread_mutex_t +#define pthread_mutexattr_t __vendor_pthread_mutexattr_t +#define pthread_cond_t __vendor_pthread_cond_t +#define pthread_condattr_t __vendor_pthread_condattr_t +#define pthread_rwlock_t __vendor_pthread_rwlock_t +#define pthread_rwlockattr_t __vendor_pthread_rwlockattr_t +#define sched_param __vendor_sched_param + +/* + * Allow structs containing pthread*_t in vendor headers + * to have some type definitions + */ +#if 0 +typedef int __vendor_pthread_t; +typedef int __vendor_pthread_attr_t; +typedef int __vendor_pthread_key_t; +typedef int __vendor_pthread_once_t; +typedef int __vendor_pthread_mutex_t; +typedef int __vendor_pthread_mutexattr_t; +typedef int __vendor_pthread_cond_t; +typedef int __vendor_pthread_condattr_t; +typedef int __vendor_pthread_rwlock_t; +typedef int __vendor_pthread_rwlockattr_t; +typedef int __vendor_sched_param; +#endif + +/* + * Include essential vendor headers + */ +#include /* for ssize_t */ +#include /* for struct timeval */ +#include /* for sockaddr */ +#include /* for sigset_t */ +#include /* for struct timespec */ +#include /* for off_t */ +@EXTRA_INCLUDE_SYS_SELECT_H@ + +/* + * Unprotect namespace, so we can define our own variants now + */ +#undef pthread_t +#undef pthread_attr_t +#undef pthread_key_t +#undef pthread_once_t +#undef pthread_mutex_t +#undef pthread_mutexattr_t +#undef pthread_cond_t +#undef pthread_condattr_t +#undef pthread_rwlock_t +#undef pthread_rwlockattr_t +#undef sched_param + +/* + * Cleanup more Pthread namespace from vendor values + */ +#undef _POSIX_THREADS +#undef _POSIX_THREAD_ATTR_STACKADDR +#undef _POSIX_THREAD_ATTR_STACKSIZE +#undef _POSIX_THREAD_PRIORITY_SCHEDULING +#undef _POSIX_THREAD_PRIO_INHERIT +#undef _POSIX_THREAD_PRIO_PROTECT +#undef _POSIX_THREAD_PROCESS_SHARED +#undef _POSIX_THREAD_SAFE_FUNCTIONS +#undef PTHREAD_DESTRUCTOR_ITERATIONS +#undef PTHREAD_KEYS_MAX +#undef PTHREAD_STACK_MIN +#undef PTHREAD_THREADS_MAX +#undef PTHREAD_CREATE_DETACHED +#undef PTHREAD_CREATE_JOINABLE +#undef PTHREAD_SCOPE_SYSTEM +#undef PTHREAD_SCOPE_PROCESS +#undef PTHREAD_INHERIT_SCHED +#undef PTHREAD_EXPLICIT_SCHED +#undef PTHREAD_CANCEL_ENABLE +#undef PTHREAD_CANCEL_DISABLE +#undef PTHREAD_CANCEL_ASYNCHRONOUS +#undef PTHREAD_CANCEL_DEFERRED +#undef PTHREAD_CANCELED +#undef PTHREAD_PROCESS_PRIVATE +#undef PTHREAD_PROCESS_SHARED +#undef PTHREAD_ONCE_INIT +#undef PTHREAD_MUTEX_DEFAULT +#undef PTHREAD_MUTEX_RECURSIVE +#undef PTHREAD_MUTEX_NORMAL +#undef PTHREAD_MUTEX_ERRORCHECK +#undef PTHREAD_MUTEX_INITIALIZER +#undef PTHREAD_COND_INITIALIZER +#undef PTHREAD_RWLOCK_INITIALIZER + +/* + * Cleanup special adjustments + */ +#if defined(__hpux) +#undef _PTHREADS_DRAFT4 +#endif + +/* +** +** API DEFINITION +** +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Fallbacks for essential typedefs + */ +@FALLBACK_PID_T@ +@FALLBACK_SIZE_T@ +@FALLBACK_SSIZE_T@ +@FALLBACK_SOCKLEN_T@ +@FALLBACK_OFF_T@ +@FALLBACK_NFDS_T@ + +/* + * Extra structure definitions + */ +struct timeval; +struct timespec; + +/* + * GNU Pth indentification + */ +#define _POSIX_THREAD_IS_GNU_PTH @PTH_VERSION_HEX@ + +/* + * Compile time symbolic feature macros for portability + * specification to applications using pthreads + */ +#define _POSIX_THREADS +#define _POSIX_THREAD_ATTR_STACKADDR +#define _POSIX_THREAD_ATTR_STACKSIZE +#undef _POSIX_THREAD_PRIORITY_SCHEDULING +#undef _POSIX_THREAD_PRIO_INHERIT +#undef _POSIX_THREAD_PRIO_PROTECT +#undef _POSIX_THREAD_PROCESS_SHARED +#undef _POSIX_THREAD_SAFE_FUNCTIONS + +/* + * System call mapping support type + * (soft variant can be overridden) + */ +#define _POSIX_THREAD_SYSCALL_HARD @PTH_SYSCALL_HARD@ +#ifndef _POSIX_THREAD_SYSCALL_SOFT +#define _POSIX_THREAD_SYSCALL_SOFT @PTH_SYSCALL_SOFT@ +#endif + +/* + * Run-time invariant values + */ +#define PTHREAD_DESTRUCTOR_ITERATIONS 4 +#define PTHREAD_KEYS_MAX 256 +#define PTHREAD_STACK_MIN 8192 +#define PTHREAD_THREADS_MAX 10000 /* actually now restriction */ + +/* + * Flags for threads and thread attributes. + */ +#define PTHREAD_CREATE_DETACHED 0x01 +#define PTHREAD_CREATE_JOINABLE 0x02 +#define PTHREAD_SCOPE_SYSTEM 0x03 +#define PTHREAD_SCOPE_PROCESS 0x04 +#define PTHREAD_INHERIT_SCHED 0x05 +#define PTHREAD_EXPLICIT_SCHED 0x06 + +/* + * Values for cancellation + */ +#define PTHREAD_CANCEL_ENABLE 0x01 +#define PTHREAD_CANCEL_DISABLE 0x02 +#define PTHREAD_CANCEL_ASYNCHRONOUS 0x01 +#define PTHREAD_CANCEL_DEFERRED 0x02 +#define PTHREAD_CANCELED ((void *)-1) + +/* + * Flags for read/write lock attributes + */ +#define PTHREAD_PROCESS_PRIVATE 0x00 +#define PTHREAD_PROCESS_SHARED 0x01 + +/* + * Forward structure definitions. + * These are mostly opaque to the application. + */ +struct pthread_st; +struct pthread_attr_st; +struct pthread_cond_st; +struct pthread_mutex_st; +struct pthread_rwlock_st; +struct sched_param; + +/* + * Primitive system data type definitions required by P1003.1c + */ +typedef struct pthread_st *pthread_t; +typedef struct pthread_attr_st *pthread_attr_t; +typedef int pthread_key_t; +typedef int pthread_once_t; +typedef int pthread_mutexattr_t; +typedef struct pthread_mutex_st *pthread_mutex_t; +typedef int pthread_condattr_t; +typedef struct pthread_cond_st *pthread_cond_t; +typedef int pthread_rwlockattr_t; +typedef struct pthread_rwlock_st *pthread_rwlock_t; + +/* + * Once support. + */ +#define PTHREAD_ONCE_INIT 0 + +/* + * Mutex static initialization values. + */ +enum pthread_mutextype { + PTHREAD_MUTEX_DEFAULT = 1, + PTHREAD_MUTEX_RECURSIVE, + PTHREAD_MUTEX_NORMAL, + PTHREAD_MUTEX_ERRORCHECK +}; + +/* + * Mutex/CondVar/RWLock static initialization values. + */ +#define PTHREAD_MUTEX_INITIALIZER (pthread_mutex_t)(NULL) +#define PTHREAD_COND_INITIALIZER (pthread_cond_t)(NULL) +#define PTHREAD_RWLOCK_INITIALIZER (pthread_rwlock_t)(NULL) + +/* + * IEEE (``POSIX'') Std 1003.1 Second Edition 1996-07-12 + */ + +/* thread attribute routines */ +extern int pthread_attr_init(pthread_attr_t *); +extern int pthread_attr_destroy(pthread_attr_t *); +extern int pthread_attr_setinheritsched(pthread_attr_t *, int); +extern int pthread_attr_getinheritsched(pthread_attr_t *, int *); +extern int pthread_attr_setschedparam(pthread_attr_t *, struct sched_param *); +extern int pthread_attr_getschedparam(pthread_attr_t *, struct sched_param *); +extern int pthread_attr_setschedpolicy(pthread_attr_t *, int); +extern int pthread_attr_getschedpolicy(pthread_attr_t *, int *); +extern int pthread_attr_setscope(pthread_attr_t *, int); +extern int pthread_attr_getscope(pthread_attr_t *, int *); +extern int pthread_attr_setstacksize(pthread_attr_t *, size_t); +extern int pthread_attr_getstacksize(pthread_attr_t *, size_t *); +extern int pthread_attr_setstackaddr(pthread_attr_t *, void *); +extern int pthread_attr_getstackaddr(pthread_attr_t *, void **); +extern int pthread_attr_setdetachstate(pthread_attr_t *, int); +extern int pthread_attr_getdetachstate(pthread_attr_t *, int *); +extern int pthread_attr_setname_np(pthread_attr_t *, char *); +extern int pthread_attr_getname_np(pthread_attr_t *, char **); +extern int pthread_attr_setprio_np(pthread_attr_t *, int); +extern int pthread_attr_getprio_np(pthread_attr_t *, int *); + +/* thread routines */ +extern int pthread_create(pthread_t *, const pthread_attr_t *, void *(*)(void *), void *); +extern int __pthread_detach(pthread_t); +#define pthread_detach(t) __pthread_detach(t) +extern pthread_t pthread_self(void); +extern int pthread_equal(pthread_t, pthread_t); +extern int pthread_yield_np(void); +extern void pthread_exit(void *); +extern int pthread_join(pthread_t, void **); +extern int pthread_once(pthread_once_t *, void (*)(void)); +extern int pthread_sigmask(int, const sigset_t *, sigset_t *); +extern int pthread_kill(pthread_t, int); + +/* context routines */ +extern int pthread_key_create(pthread_key_t *, void (*)(void *)); +extern int pthread_key_delete(pthread_key_t); +extern int pthread_setspecific(pthread_key_t, const void *); +extern void *pthread_getspecific(pthread_key_t); + +/* cancel routines */ +extern int pthread_cancel(pthread_t); +extern void pthread_testcancel(void); +extern int pthread_setcancelstate(int, int *); +extern int pthread_setcanceltype(int, int *); + +/* scheduler routines */ +extern int pthread_setschedparam(pthread_t, int, const struct sched_param *); +extern int pthread_getschedparam(pthread_t, int *, struct sched_param *); + +/* cleanup routines */ +extern void pthread_cleanup_push(void (*)(void *), void *); +extern void pthread_cleanup_pop(int); +extern int pthread_atfork(void (*)(void), void (*)(void), void (*)(void)); + +/* mutex attribute routines */ +extern int pthread_mutexattr_init(pthread_mutexattr_t *); +extern int pthread_mutexattr_destroy(pthread_mutexattr_t *); +extern int pthread_mutexattr_setprioceiling(pthread_mutexattr_t *, int); +extern int pthread_mutexattr_getprioceiling(pthread_mutexattr_t *, int *); +extern int pthread_mutexattr_setprotocol(pthread_mutexattr_t *, int); +extern int pthread_mutexattr_getprotocol(pthread_mutexattr_t *, int *); +extern int pthread_mutexattr_setpshared(pthread_mutexattr_t *, int); +extern int pthread_mutexattr_getpshared(pthread_mutexattr_t *, int *); +extern int pthread_mutexattr_settype(pthread_mutexattr_t *, int); +extern int pthread_mutexattr_gettype(pthread_mutexattr_t *, int *); + +/* mutex routines */ +extern int pthread_mutex_init(pthread_mutex_t *, const pthread_mutexattr_t *); +extern int pthread_mutex_destroy(pthread_mutex_t *); +extern int pthread_mutex_setprioceiling(pthread_mutex_t *, int, int *); +extern int pthread_mutex_getprioceiling(pthread_mutex_t *, int *); +extern int pthread_mutex_lock(pthread_mutex_t *); +extern int pthread_mutex_trylock(pthread_mutex_t *); +extern int pthread_mutex_unlock(pthread_mutex_t *); + +/* rwlock attribute routines */ +extern int pthread_rwlockattr_init(pthread_rwlockattr_t *); +extern int pthread_rwlockattr_destroy(pthread_rwlockattr_t *); +extern int pthread_rwlockattr_setpshared(pthread_rwlockattr_t *, int); +extern int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t *, int *); + +/* rwlock routines */ +extern int pthread_rwlock_init(pthread_rwlock_t *, const pthread_rwlockattr_t *); +extern int pthread_rwlock_destroy(pthread_rwlock_t *); +extern int pthread_rwlock_rdlock(pthread_rwlock_t *); +extern int pthread_rwlock_tryrdlock(pthread_rwlock_t *); +extern int pthread_rwlock_wrlock(pthread_rwlock_t *); +extern int pthread_rwlock_trywrlock(pthread_rwlock_t *); +extern int pthread_rwlock_unlock(pthread_rwlock_t *); + +/* condition attribute routines */ +extern int pthread_condattr_init(pthread_condattr_t *); +extern int pthread_condattr_destroy(pthread_condattr_t *); +extern int pthread_condattr_setpshared(pthread_condattr_t *, int); +extern int pthread_condattr_getpshared(pthread_condattr_t *, int *); + +/* condition routines */ +extern int pthread_cond_init(pthread_cond_t *, const pthread_condattr_t *); +extern int pthread_cond_destroy(pthread_cond_t *); +extern int pthread_cond_broadcast(pthread_cond_t *); +extern int pthread_cond_signal(pthread_cond_t *); +extern int pthread_cond_wait(pthread_cond_t *, pthread_mutex_t *); +extern int pthread_cond_timedwait(pthread_cond_t *, pthread_mutex_t *, const struct timespec *); + +/* + * Extensions created by POSIX 1003.1j + */ +extern int pthread_abort(pthread_t); + +/* + * Optionally fake poll(2) data structure and options + */ +#if !(@PTH_FAKE_POLL@) +/* use vendor poll(2) environment */ +#include +#ifndef INFTIM +#define INFTIM (-1) +#endif +#else +/* fake a poll(2) environment */ +#define POLLIN 0x0001 /* any readable data available */ +#define POLLPRI 0x0002 /* OOB/Urgent readable data */ +#define POLLOUT 0x0004 /* file descriptor is writeable */ +#define POLLERR 0x0008 /* some poll error occurred */ +#define POLLHUP 0x0010 /* file descriptor was "hung up" */ +#define POLLNVAL 0x0020 /* requested events "invalid" */ +#define POLLRDNORM POLLIN +#define POLLRDBAND POLLIN +#define POLLWRNORM POLLOUT +#define POLLWRBAND POLLOUT +#ifndef INFTIM +#define INFTIM (-1) /* poll infinite */ +#endif +struct pollfd { + int fd; /* which file descriptor to poll */ + short events; /* events we are interested in */ + short revents; /* events found on return */ +}; +#endif + +/* + * Optionally fake readv(2)/writev(2) data structure and options + */ +#if !(@PTH_FAKE_RWV@) +/* use vendor readv(2)/writev(2) environment */ +#include +#ifndef UIO_MAXIOV +#define UIO_MAXIOV 1024 +#endif +#else +/* fake a readv(2)/writev(2) environment */ +struct iovec { + void *iov_base; /* memory base address */ + size_t iov_len; /* memory chunk length */ +}; +#ifndef UIO_MAXIOV +#define UIO_MAXIOV 1024 +#endif +#endif + +/* + * Replacement Functions (threading aware) + */ + +extern pid_t __pthread_fork(void); +extern unsigned int __pthread_sleep(unsigned int); +extern int __pthread_sigwait(const sigset_t *, int *); +extern pid_t __pthread_waitpid(pid_t, int *, int); +extern int __pthread_connect(int, struct sockaddr *, socklen_t); +extern int __pthread_accept(int, struct sockaddr *, socklen_t *); +extern int __pthread_select(int, fd_set *, fd_set *, fd_set *, struct timeval *); +extern int __pthread_poll(struct pollfd *, nfds_t, int); +extern ssize_t __pthread_read(int, void *, size_t); +extern ssize_t __pthread_write(int, const void *, size_t); +extern ssize_t __pthread_readv(int, const struct iovec *, int); +extern ssize_t __pthread_writev(int, const struct iovec *, int); +extern ssize_t __pthread_pread(int, void *, size_t, off_t); +extern ssize_t __pthread_pwrite(int, const void *, size_t, off_t); + +#if _POSIX_THREAD_SYSCALL_SOFT && !defined(_PTHREAD_PRIVATE) +#define fork __pthread_fork +#define sleep __pthread_sleep +#define sigwait __pthread_sigwait +#define waitpid __pthread_waitpid +#define connect __pthread_connect +#define accept __pthread_accept +#define select __pthread_select +#define poll __pthread_poll +#define read __pthread_read +#define write __pthread_write +#define readv __pthread_readv +#define writev __pthread_writev +#define pread __pthread_pread +#define pwrite __pthread_pwrite +#endif + +/* + * More "special" POSIX stuff + */ + +#define sched_yield pthread_yield_np + +/* + * Backward Compatibility Stuff for Pthread draft 4 (DCE threads) + */ + +#ifdef _POSIX_BACKCOMPAT + +#define _POSIX_THREADS_PER_THREAD_SIGNALS 1 + +#define pthread_attr_default NULL +#define pthread_condattr_default NULL +#define pthread_mutexattr_default NULL +#define pthread_once_init PTHREAD_ONCE_INIT + +#define pthread_detach(thread) __pthread_detach(*(thread)) + +#define pthread_attr_init pthread_attr_create +#define pthread_attr_delete pthread_attr_destroy +#define pthread_keycreate pthread_key_create +#define pthread_yield pthread_yield_np + +#define pthread_attr_setprio pthread_attr_setprio_np +#define pthread_attr_getprio pthread_attr_getprio_np + +#define CANCEL_ON 1 +#define CANCEL_OFF 2 +#define pthread_setcancel(what) \ + pthread_setcancelstate((what) == CANCEL_ON ? \ + PTHREAD_CANCEL_ENABLE : \ + PTHREAD_CANCEL_DISABLE) +#define pthread_setasynccancel(what) \ + pthread_setcanceltype((what) == CANCEL_ON ? \ + PTHREAD_CANCEL_ASYNCHRONOUS : \ + PTHREAD_CANCEL_DEFERRED) + +#define pthread_setscheduler #error +#define pthread_setprio #error +#define pthread_attr_setsched #error +#define pthread_attr_getsched #error + +#endif /* _POSIX_BACKCOMPAT */ + +#ifdef __cplusplus +} +#endif + +#endif /* _PTH_PTHREAD_H_ */ +