From 5629d479c341f7bfaf89489b88f0fc701860ac6f Mon Sep 17 00:00:00 2001 From: rpj Date: Thu, 23 Jul 1998 13:34:41 +0000 Subject: * 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. --- implement.h | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'implement.h') 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 */ -- cgit v1.2.3