diff options
author | Robert Collins <rbtcollins@hotmail.com> | 2002-11-24 13:54:14 +0000 |
---|---|---|
committer | Robert Collins <rbtcollins@hotmail.com> | 2002-11-24 13:54:14 +0000 |
commit | f8c8e13b7e16dba8c04adc6912a0610292488656 (patch) | |
tree | d4595038845d61fb3fe6c3d54b255068ca38a90c /winsup/cygwin/thread.h | |
parent | 4f0de34d3747d689cc741f045072486b0c602f15 (diff) | |
download | cygnal-f8c8e13b7e16dba8c04adc6912a0610292488656.tar.gz cygnal-f8c8e13b7e16dba8c04adc6912a0610292488656.tar.bz2 cygnal-f8c8e13b7e16dba8c04adc6912a0610292488656.zip |
2002-11-05 Thomas Pfaff <tpfaff@gmx.net>
* dcrt0.cc (dll_crt0_1): Add call to pthread::initMainThread to
initialize mainthread when it is safe to call new.
* init.cc (dll_entry): Change call to store reents in tls key.
* thread.cc (_reent_clib) : Change call to get reents from tls
key.
(_reent_winsup): Ditto.
(MTinterface::Init): Key handling changed. Remove initialization
of member variables.
(MTinterface::fixup_after_fork): Reinitialize mainthread object
after fork. Reset threadount to 1.
(pthread::initMainThread): Create mainthread object dynamically.
and initialize with valid handles.
(pthread::self): Remove calls to create thread objects.
(pthread::setTlsSelfPointer): Change call to store thread self
handle in tls key.
(pthread::getTlsSelfPointer): New static method.
(pthread::exit): Remove setTlsSelfPointer call.
(pthread::initCurrentThread): New method.
(pthread::thread_init_wrapper): Change call to store thread self
handle in tls key.
(pthread::join): Check for a valid joiner.
(pthreadNull::pthreadNull): Mark Null object as detached.
(pthreadNull::exit): Terminate thread via ExitThread.
* thread.h (pthread::initMainThread): Change parameter in function
call.
(pthread::getTlsSelfPointer): New static method.
(pthread::initCurrentThread): New method.
(MTinterface::reent_key): Remove.
(MTinterface::thread_self_dwTlsIndex): Ditto..
(MTinterface::indexallocated): Ditto.
(MTinterface::mainthread): Ditto.
(MTinterface::reent_key): New member.
(MTinterface::thread_self_key): Ditto.
(MTinterface::MTinterface): Initialize all members.
Diffstat (limited to 'winsup/cygwin/thread.h')
-rw-r--r-- | winsup/cygwin/thread.h | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/winsup/cygwin/thread.h b/winsup/cygwin/thread.h index 73e57edfa..32175a4ac 100644 --- a/winsup/cygwin/thread.h +++ b/winsup/cygwin/thread.h @@ -344,7 +344,7 @@ public: pthread (); virtual ~pthread (); - static void initMainThread(pthread *, HANDLE); + static void initMainThread (bool); static bool isGoodObject(pthread_t const *); static void atforkprepare(); static void atforkparent(); @@ -387,10 +387,12 @@ private: void pop_all_cleanup_handlers (void); void precreate (pthread_attr *); void postcreate (); - void setThreadIdtoCurrent(); - static void setTlsSelfPointer(pthread *); + void setThreadIdtoCurrent (); + static void setTlsSelfPointer (pthread *); + static pthread *getTlsSelfPointer (); void cancel_self (); DWORD getThreadId (); + void initCurrentThread (); }; class pthreadNull : public pthread @@ -493,17 +495,12 @@ class MTinterface { public: // General - DWORD reent_index; - DWORD thread_self_dwTlsIndex; - /* we may get 0 for the Tls index.. grrr */ - int indexallocated; int concurrency; long int threadcount; // Used for main thread data, and sigproc thread struct __reent_t reents; struct _winsup_t winsup_reent; - pthread mainthread; callback *pthread_prepare; callback *pthread_child; @@ -514,18 +511,25 @@ public: class pthread_cond * conds; class semaphore * semaphores; + pthread_key reent_key; + pthread_key thread_self_key; + void Init (int); void fixup_before_fork (void); void fixup_after_fork (void); - MTinterface ():reent_index (0), indexallocated (0), threadcount (1) + MTinterface () : + concurrency (0), threadcount (1), + pthread_prepare (NULL), pthread_child (NULL), pthread_parent (NULL), + mutexs (NULL), conds (NULL), semaphores (NULL), + reent_key (NULL), thread_self_key (NULL) { - pthread_prepare = NULL; - pthread_child = NULL; - pthread_parent = NULL; } }; + +#define MT_INTERFACE user_data->threadinterface + extern "C" { int __pthread_attr_init (pthread_attr_t * attr); |