#ifdef GC_SOLARIS_THREADS /* The set of all known threads. We intercept thread creation and */ /* joins. We never actually create detached threads. We allocate all */ /* new thread stacks ourselves. These allow us to maintain this */ /* data structure. */ /* Protected by GC_thr_lock. */ /* Some of this should be declared volatile, but that's incosnsistent */ /* with some library routine declarations. In particular, the */ /* definition of cond_t doesn't mention volatile! */ typedef struct GC_Thread_Rep { struct GC_Thread_Rep * next; thread_t id; word flags; # define FINISHED 1 /* Thread has exited. */ # define DETACHED 2 /* Thread is intended to be detached. */ # define CLIENT_OWNS_STACK 4 /* Stack was supplied by client. */ # define SUSPNDED 8 /* Currently suspended. */ /* SUSPENDED is used insystem header. */ ptr_t stack; size_t stack_size; cond_t join_cv; void * status; } * GC_thread; extern GC_thread GC_new_thread(thread_t id); extern GC_bool GC_thr_initialized; extern volatile GC_thread GC_threads[]; extern size_t GC_min_stack_sz; extern size_t GC_page_sz; extern void GC_thr_init(void); # endif /* GC_SOLARIS_THREADS */