51488
|
1 #ifdef GC_SOLARIS_THREADS
|
|
2
|
|
3 /* The set of all known threads. We intercept thread creation and */
|
|
4 /* joins. We never actually create detached threads. We allocate all */
|
|
5 /* new thread stacks ourselves. These allow us to maintain this */
|
|
6 /* data structure. */
|
|
7 /* Protected by GC_thr_lock. */
|
|
8 /* Some of this should be declared volatile, but that's incosnsistent */
|
|
9 /* with some library routine declarations. In particular, the */
|
|
10 /* definition of cond_t doesn't mention volatile! */
|
|
11 typedef struct GC_Thread_Rep {
|
|
12 struct GC_Thread_Rep * next;
|
|
13 thread_t id;
|
|
14 word flags;
|
|
15 # define FINISHED 1 /* Thread has exited. */
|
|
16 # define DETACHED 2 /* Thread is intended to be detached. */
|
|
17 # define CLIENT_OWNS_STACK 4
|
|
18 /* Stack was supplied by client. */
|
|
19 # define SUSPNDED 8 /* Currently suspended. */
|
|
20 /* SUSPENDED is used insystem header. */
|
|
21 ptr_t stack;
|
|
22 size_t stack_size;
|
|
23 cond_t join_cv;
|
|
24 void * status;
|
|
25 } * GC_thread;
|
|
26 extern GC_thread GC_new_thread(thread_t id);
|
|
27
|
|
28 extern GC_bool GC_thr_initialized;
|
|
29 extern volatile GC_thread GC_threads[];
|
|
30 extern size_t GC_min_stack_sz;
|
|
31 extern size_t GC_page_sz;
|
|
32 extern void GC_thr_init(void);
|
|
33
|
|
34 # endif /* GC_SOLARIS_THREADS */
|
|
35
|