35 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#ifdef 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 SUSPENDED 8      /* Currently suspended. */
 | 
						|
    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 /* SOLARIS_THREADS */
 | 
						|
 |