1/* 2 * Copyright 2003-2009, Axel D��rfler, axeld@pinc-software.de. 3 * Copyright 2007, Ryan Leavengood, leavengood@gmail.com. 4 * All rights reserved. Distributed under the terms of the MIT License. 5 */ 6#ifndef _PTHREAD_PRIVATE_H_ 7#define _PTHREAD_PRIVATE_H_ 8 9 10#include <pthread.h> 11 12#include <OS.h> 13 14 15// _pthread_thread::flags values 16#define THREAD_DETACHED 0x01 17#define THREAD_DEAD 0x02 18#define THREAD_CANCELED 0x04 19#define THREAD_CANCEL_ENABLED 0x08 20#define THREAD_CANCEL_ASYNCHRONOUS 0x10 21 22// _pthread_mutex::flags values 23#define MUTEX_FLAG_SHARED 0x80000000 24 25 26struct thread_creation_attributes; 27 28// The public *_t types are only pointers to these structures 29// This way, we are completely free to change them, which might be 30// necessary in the future (not only due to the incomplete implementation 31// at this point). 32 33typedef struct _pthread_condattr { 34 bool process_shared; 35 clockid_t clock_id; 36} pthread_condattr; 37 38typedef struct _pthread_mutexattr { 39 int32 type; 40 bool process_shared; 41} pthread_mutexattr; 42 43typedef struct _pthread_barrierattr { 44 bool process_shared; 45} pthread_barrierattr; 46 47typedef struct _pthread_attr { 48 int32 detach_state; 49 int32 sched_priority; 50 size_t stack_size; 51 size_t guard_size; 52 void *stack_address; 53} pthread_attr; 54 55typedef struct _pthread_rwlockattr { 56 uint32_t flags; 57} pthread_rwlockattr; 58 59typedef void (*pthread_key_destructor)(void *data); 60 61struct pthread_key { 62 int32 sequence; 63 pthread_key_destructor destructor; 64}; 65 66struct pthread_key_data { 67 int32 sequence; 68 void *value; 69}; 70 71#define PTHREAD_UNUSED_SEQUENCE 0 72 73typedef struct _pthread_thread { 74 thread_id id; 75 int32 flags; 76 void *(*entry)(void*); 77 void *entry_argument; 78 void *exit_value; 79 struct pthread_key_data specific[PTHREAD_KEYS_MAX]; 80 struct __pthread_cleanup_handler *cleanup_handlers; 81} pthread_thread; 82 83 84#ifdef __cplusplus 85extern "C" { 86#endif 87 88void __pthread_key_call_destructors(pthread_thread *thread); 89void __pthread_destroy_thread(void); 90pthread_thread *__allocate_pthread(void* (*entry)(void*), void *data); 91void __init_pthread(pthread_thread* thread, void* (*entry)(void*), void* data); 92status_t __pthread_init_creation_attributes( 93 const pthread_attr_t* pthreadAttributes, pthread_t thread, 94 status_t (*entryFunction)(void*, void*), void* argument1, 95 void* argument2, const char* name, 96 struct thread_creation_attributes* attributes); 97void __pthread_set_default_priority(int32 priority); 98status_t __pthread_mutex_lock(pthread_mutex_t* mutex, bigtime_t timeout); 99 100int __pthread_getname_np(pthread_t thread, char* buffer, size_t length); 101int __pthread_setname_np(pthread_t thread, const char* name); 102 103#ifdef __cplusplus 104} 105#endif 106 107#endif /* _PTHREAD_PRIVATE_H_ */ 108