diff options
author | Christopher Faylor <me@cgf.cx> | 2001-04-13 15:28:20 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2001-04-13 15:28:20 +0000 |
commit | 39b6859a28b8b50d73fe6ae080ea42f4ef1bdea3 (patch) | |
tree | 6e6cc0afd7868c2a935f16c4e10a3d20ebf532b3 /winsup/cygwin/thread.h | |
parent | e61cead397205b61dafed0d725cf9dcd89aead76 (diff) | |
download | cygnal-39b6859a28b8b50d73fe6ae080ea42f4ef1bdea3.tar.gz cygnal-39b6859a28b8b50d73fe6ae080ea42f4ef1bdea3.tar.bz2 cygnal-39b6859a28b8b50d73fe6ae080ea42f4ef1bdea3.zip |
* fork.cc (fork_child): Call the __pthread_atforkchild function.
(fork_parent): Call the __pthread_atforkparent function.
* cygwin.din: Export pthread_atfork.
* thread.h (callback): New class.
(MTinterface): Use it.
* thread.cc (__pthread_atforkprepare): New function.
(__pthread_atforkparent): New function.
(__pthread_atforkchild): New function.
(__pthread_atfork): New function.
* pthread.cc (pthread_atfork): New function.
Diffstat (limited to 'winsup/cygwin/thread.h')
-rw-r--r-- | winsup/cygwin/thread.h | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/winsup/cygwin/thread.h b/winsup/cygwin/thread.h index 00c10b298..2b6e7d7e7 100644 --- a/winsup/cygwin/thread.h +++ b/winsup/cygwin/thread.h @@ -317,6 +317,13 @@ public: ~semaphore (); }; +class callback +{ +public: + void (*cb)(void); + class callback * next; +}; + class MTinterface { public: @@ -333,14 +340,23 @@ public: pthread mainthread; pthread_key_destructor_list destructors; + callback *pthread_prepare; + callback *pthread_child; + callback *pthread_parent; void Init (int); - MTinterface ():reent_index (0), indexallocated (0) + MTinterface ():reent_index (0), indexallocated (0) { + pthread_prepare = NULL; + pthread_child = NULL; + pthread_parent = NULL; } }; +void __pthread_atforkprepare(void); +void __pthread_atforkparent(void); +void __pthread_atforkchild(void); extern "C" { @@ -350,6 +366,7 @@ void *thread_init_wrapper (void *); int __pthread_create (pthread_t * thread, const pthread_attr_t * attr, void *(*start_routine) (void *), void *arg); int __pthread_once (pthread_once_t *, void (*)(void)); +int __pthread_atfork(void (*)(void), void (*)(void), void (*)(void)); int __pthread_attr_init (pthread_attr_t * attr); int __pthread_attr_destroy (pthread_attr_t * attr); |