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 23 struct thread_creation_attributes; 24 25 // The public *_t types are only pointers to these structures 26 // This way, we are completely free to change them, which might be 27 // necessary in the future (not only due to the incomplete implementation 28 // at this point). 29 30 typedef struct _pthread_condattr { 31 bool process_shared; 32 } pthread_condattr; 33 34 typedef struct _pthread_mutexattr { 35 int32 type; 36 bool process_shared; 37 } pthread_mutexattr; 38 39 typedef struct _pthread_attr { 40 int32 detach_state; 41 int32 sched_priority; 42 size_t stack_size; 43 size_t guard_size; 44 } pthread_attr; 45 46 typedef struct _pthread_rwlockattr { 47 uint32_t flags; 48 } pthread_rwlockattr; 49 50 typedef void (*pthread_key_destructor)(void *data); 51 52 struct pthread_key { 53 vint32 sequence; 54 pthread_key_destructor destructor; 55 }; 56 57 struct pthread_key_data { 58 vint32 sequence; 59 void *value; 60 }; 61 62 #define PTHREAD_UNUSED_SEQUENCE 0 63 64 typedef struct _pthread_thread { 65 thread_id id; 66 int32 flags; 67 void *(*entry)(void*); 68 void *entry_argument; 69 void *exit_value; 70 struct pthread_key_data specific[PTHREAD_KEYS_MAX]; 71 struct __pthread_cleanup_handler *cleanup_handlers; 72 } pthread_thread; 73 74 75 #ifdef __cplusplus 76 extern "C" { 77 #endif 78 79 void __pthread_key_call_destructors(pthread_thread *thread); 80 void __pthread_destroy_thread(void); 81 pthread_thread *__allocate_pthread(void* (*entry)(void*), void *data); 82 void __init_pthread(pthread_thread* thread, void* (*entry)(void*), void* data); 83 status_t __pthread_init_creation_attributes( 84 const pthread_attr_t* pthreadAttributes, pthread_t thread, 85 status_t (*entryFunction)(void*, void*), void* argument1, 86 void* argument2, const char* name, 87 struct thread_creation_attributes* attributes); 88 89 #ifdef __cplusplus 90 } 91 #endif 92 93 #endif /* _PTHREAD_PRIVATE_H_ */ 94