diff options
| author | rpj <rpj> | 1998-07-23 13:34:41 +0000 | 
|---|---|---|
| committer | rpj <rpj> | 1998-07-23 13:34:41 +0000 | 
| commit | 5629d479c341f7bfaf89489b88f0fc701860ac6f (patch) | |
| tree | 42c8f2719b617b8db2e6c611daf00db04304c757 /implement.h | |
| parent | f33f4460f9de9c2d2ae6f3bf05caed391c6ad485 (diff) | |
	* global.c: New. Global data objects declared here. These moved from
	pthread.h.
	* pthread.h: Move implementation hidden definitions into
	implement.h.
	* implement.h: Move implementation hidden definitions from
	pthread.h. Add constants to index into the different handler stacks.
	* cleanup.c (_pthread_handler_push): Simplify args. Restructure.
	(_pthread_handler_pop): Simplify args. Restructure.
	(_pthread_handler_pop_all): Simplify args. Restructure.
Diffstat (limited to 'implement.h')
| -rw-r--r-- | implement.h | 41 | 
1 files changed, 41 insertions, 0 deletions
| diff --git a/implement.h b/implement.h index 2256965..e507831 100644 --- a/implement.h +++ b/implement.h @@ -27,6 +27,47 @@ enum { _PTHREAD_HANDLER_POP_LIFO, _PTHREAD_HANDLER_POP_FIFO };   */  #define RND_SIZEOF(T) (((sizeof(T) / sizeof(DWORD)) + 1) * sizeof(DWORD)) +/* General description of a handler function on a stack. */ +typedef struct _pthread_handler_node _pthread_handler_node_t; + +struct _pthread_handler_node { +  _pthread_handler_node_t next; +  void (* routine)(void *); +  void * arg; +}; + +/* Stores a thread call routine and argument. */ +typedef struct { +  unsigned (*routine)(void *); +  void * arg; +} _pthread_call_t; + +#define _PTHREAD_THIS (_pthread_find_thread_entry(pthread_this())) + +#define _PTHREAD_STACK(stack) \ +  ((_pthread_handler_node_t *) &(_PTHREAD_THIS)->cleanupstack + stack); + +/* An element in the thread table. */ +typedef struct _pthread_threads_thread _pthread_threads_thread_t; + +struct _pthread_threads_thread { +  pthread_t                   thread; +  pthread_attr_t              attr; +  _pthread_call_t             call; +  enum { +    _PTHREAD_CLEANUP_STACK, +    _PTHREAD_DESTRUCTOR_STACK, +    _PTHREAD_FORKPREPARE_STACK, +    _PTHREAD_FORKPARENT_STACK, +    _PTHREAD_FORKCHILD_STACK +  }; +  _pthread_handler_node_t *   cleanupstack; +  _pthread_handler_node_t *   destructorstack; +  _pthread_handler_node_t *   forkpreparestack; +  _pthread_handler_node_t *   forkparentstack; +  _pthread_handler_node_t *   forkchildstack; +}; +  #ifdef __cplusplus  extern "C" {  #endif /* __cplusplus */ | 
