xref: /haiku/headers/private/libroot/pthread_private.h (revision ab4411e89a079bc0a40d901995f3418d998c51b3)
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 	int32		sequence;
54 	pthread_key_destructor destructor;
55 };
56 
57 struct pthread_key_data {
58 	int32		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