summaryrefslogtreecommitdiff
path: root/lib/librthread/rthread.h
diff options
context:
space:
mode:
authorPhilip Guenther <guenther@cvs.openbsd.org>2017-09-05 02:40:56 +0000
committerPhilip Guenther <guenther@cvs.openbsd.org>2017-09-05 02:40:56 +0000
commitcccbd286e927a6a92e8f7231e57ddd17a243314f (patch)
tree41eff3ba3c242fab3369fa5a3338b606e3212e48 /lib/librthread/rthread.h
parent1fb8297ae3c4f75c7a5d87d15fc92ba8fa2cbbdc (diff)
Move mutex, condvar, and thread-specific data routes, pthread_once, and
pthread_exit from libpthread to libc, along with low-level bits to support them. Major bump to both libc and libpthread. Requested by libressl team. Ports testing by naddy@ ok kettenis@
Diffstat (limited to 'lib/librthread/rthread.h')
-rw-r--r--lib/librthread/rthread.h144
1 files changed, 9 insertions, 135 deletions
diff --git a/lib/librthread/rthread.h b/lib/librthread/rthread.h
index cf041aacbe1..6f8c857f203 100644
--- a/lib/librthread/rthread.h
+++ b/lib/librthread/rthread.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: rthread.h,v 1.62 2017/08/01 08:57:48 kettenis Exp $ */
+/* $OpenBSD: rthread.h,v 1.63 2017/09/05 02:40:54 guenther Exp $ */
/*
* Copyright (c) 2004,2005 Ted Unangst <tedu@openbsd.org>
* All Rights Reserved.
@@ -27,9 +27,11 @@
* THE MACHINE DEPENDENT CERROR CODE HAS HARD CODED OFFSETS INTO PTHREAD_T!
*/
-#include <sys/queue.h>
+#ifndef _RTHREAD_H_
+#define _RTHREAD_H_
+
#include <semaphore.h>
-#include <machine/spinlock.h>
+#include "thread_private.h"
#ifdef __LP64__
#define RTHREAD_STACK_SIZE_DEF (512 * 1024)
@@ -37,8 +39,6 @@
#define RTHREAD_STACK_SIZE_DEF (256 * 1024)
#endif
-#define _SPINLOCK_UNLOCKED _ATOMIC_LOCK_UNLOCKED
-
struct stack {
SLIST_ENTRY(stack) link; /* link for free default stacks */
void *sp; /* machine stack pointer */
@@ -48,59 +48,9 @@ struct stack {
size_t len; /* total size of allocated stack */
};
-struct __sem {
- _atomic_lock_t lock;
- volatile int waitcount;
- volatile int value;
- int shared;
-};
-
-TAILQ_HEAD(pthread_queue, pthread);
-
-#ifdef FUTEX
-
-struct pthread_mutex {
- volatile unsigned int lock;
- int type;
- pthread_t owner;
- int count;
- int prioceiling;
-};
-
-struct pthread_cond {
- volatile unsigned int seq;
- clockid_t clock;
- struct pthread_mutex *mutex;
-};
-
-#else
-
-struct pthread_mutex {
- _atomic_lock_t lock;
- struct pthread_queue lockers;
- int type;
- pthread_t owner;
- int count;
- int prioceiling;
-};
-
-struct pthread_cond {
- _atomic_lock_t lock;
- struct pthread_queue waiters;
- struct pthread_mutex *mutex;
- clockid_t clock;
-};
-#endif /* FUTEX */
-
-struct pthread_mutex_attr {
- int ma_type;
- int ma_protocol;
- int ma_prioceiling;
-};
+#define PTHREAD_MIN_PRIORITY 0
+#define PTHREAD_MAX_PRIORITY 31
-struct pthread_cond_attr {
- clockid_t ca_clock;
-};
struct pthread_rwlock {
_atomic_lock_t lock;
@@ -113,37 +63,6 @@ struct pthread_rwlockattr {
int pshared;
};
-struct pthread_attr {
- void *stack_addr;
- size_t stack_size;
- size_t guard_size;
- int detach_state;
- int contention_scope;
- int sched_policy;
- struct sched_param sched_param;
- int sched_inherit;
-};
-
-#define PTHREAD_MIN_PRIORITY 0
-#define PTHREAD_MAX_PRIORITY 31
-
-struct rthread_key {
- int used;
- void (*destructor)(void *);
-};
-
-struct rthread_storage {
- int keyid;
- struct rthread_storage *next;
- void *data;
-};
-
-struct rthread_cleanup_fn {
- void (*fn)(void *);
- void *arg;
- struct rthread_cleanup_fn *next;
-};
-
struct pthread_barrier {
pthread_mutex_t mutex;
pthread_cond_t cond;
@@ -162,61 +81,20 @@ struct pthread_spinlock {
pthread_t owner;
};
-struct tib;
-struct pthread {
- struct __sem donesem;
- unsigned int flags;
- _atomic_lock_t flags_lock;
- struct tib *tib;
- void *retval;
- void *(*fn)(void *);
- void *arg;
- char name[32];
- struct stack *stack;
- LIST_ENTRY(pthread) threads;
- TAILQ_ENTRY(pthread) waiting;
- pthread_cond_t blocking_cond;
- struct pthread_attr attr;
- struct rthread_storage *local_storage;
- struct rthread_cleanup_fn *cleanup_fns;
- int myerrno;
-
- /* cancel received in a delayed cancel block? */
- int delayed_cancel;
-};
-/* flags in pthread->flags */
-#define THREAD_DONE 0x001
-#define THREAD_DETACHED 0x002
-
-/* flags in tib->tib_thread_flags */
-#define TIB_THREAD_ASYNC_CANCEL 0x001
-#define TIB_THREAD_INITIAL_STACK 0x002 /* has stack from exec */
-
-#define ENTER_DELAYED_CANCEL_POINT(tib, self) \
- (self)->delayed_cancel = 0; \
- ENTER_CANCEL_POINT_INNER(tib, 1, 1)
#define ROUND_TO_PAGE(size) \
(((size) + (_thread_pagesize - 1)) & ~(_thread_pagesize - 1))
__BEGIN_HIDDEN_DECLS
-void _spinlock(volatile _atomic_lock_t *);
-int _spinlocktry(volatile _atomic_lock_t *);
-void _spinunlock(volatile _atomic_lock_t *);
int _sem_wait(sem_t, int, const struct timespec *, int *);
int _sem_post(sem_t);
void _rthread_init(void);
struct stack *_rthread_alloc_stack(pthread_t);
void _rthread_free_stack(struct stack *);
-void _rthread_tls_destructors(pthread_t);
-void _rthread_debug(int, const char *, ...)
- __attribute__((__format__ (printf, 2, 3)));
-void _rthread_debug_init(void);
#ifndef NO_PIC
void _rthread_dl_lock(int what);
#endif
-void _thread_malloc_reinit(void);
extern int _threads_ready;
extern size_t _thread_pagesize;
@@ -227,10 +105,6 @@ __END_HIDDEN_DECLS
void _thread_dump_info(void);
-/* syscalls not declared in system headers */
#define REDIRECT_SYSCALL(x) typeof(x) x asm("_thread_sys_"#x)
-void __threxit(pid_t *);
-int __thrsleep(const volatile void *, clockid_t, const struct timespec *,
- volatile void *, const int *);
-int __thrwakeup(const volatile void *, int n);
-int __thrsigdivert(sigset_t, siginfo_t *, const struct timespec *);
+
+#endif /* _RTHREAD_H_ */