From a361fa4074e7f581a41a6a63ab6ca97eea8314dd Mon Sep 17 00:00:00 2001 From: cgf Date: Sat, 10 Apr 2004 00:53:25 +0000 Subject: [PATCH] * thread.h (pthread::init_mainthread): Remove parameter forked. (pthread::set_tls_self_pointer): New static function. * thread.cc (MTinterface::fixup_after_fork): Change call to pthread::init_mainthread. (pthread::init_mainthread): Remove parameter forked. Simplify thread self pointer handling. (pthread::self): Set thread self pointer to null_pthread if thread has not been initialized. (pthread::set_tls_self_pointer): New static function. --- winsup/cygwin/ChangeLog | 12 ++++++++++++ winsup/cygwin/thread.cc | 34 +++++++++++++++++++--------------- winsup/cygwin/thread.h | 4 ++-- 3 files changed, 33 insertions(+), 17 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index f457a56687..d7f7d2801f 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,15 @@ +2004-04-09 Thomas Pfaff + + * thread.h (pthread::init_mainthread): Remove parameter forked. + (pthread::set_tls_self_pointer): New static function. + * thread.cc (MTinterface::fixup_after_fork): Change call to + pthread::init_mainthread. + (pthread::init_mainthread): Remove parameter forked. Simplify thread + self pointer handling. + (pthread::self): Set thread self pointer to null_pthread if thread has + not been initialized. + (pthread::set_tls_self_pointer): New static function. + 2004-04-05 Pierre Humblet * path.cc (path_conv::check): Optimize symlink replacements. diff --git a/winsup/cygwin/thread.cc b/winsup/cygwin/thread.cc index 3652a91fae..56074425ab 100644 --- a/winsup/cygwin/thread.cc +++ b/winsup/cygwin/thread.cc @@ -153,7 +153,7 @@ MTinterface::fixup_after_fork (void) pthread_key::fixup_after_fork (); threadcount = 0; - pthread::init_mainthread (true); + pthread::init_mainthread (); pthread::fixup_after_fork (); pthread_mutex::fixup_after_fork (); @@ -166,23 +166,17 @@ MTinterface::fixup_after_fork (void) /* static methods */ void -pthread::init_mainthread (const bool forked) +pthread::init_mainthread () { pthread *thread = get_tls_self_pointer (); if (!thread) { - if (forked) - thread = pthread_null::get_null_pthread (); - else - { - thread = new pthread (); - if (!thread) - api_fatal ("failed to create mainthread object"); - } + thread = new pthread (); + if (!thread) + api_fatal ("failed to create mainthread object"); } - thread->cygtls = &_my_tls; - _my_tls.tid = thread; + set_tls_self_pointer (thread); thread->thread_id = GetCurrentThreadId (); if (!DuplicateHandle (GetCurrentProcess (), GetCurrentThread (), GetCurrentProcess (), &thread->win32_obj_id, @@ -198,9 +192,12 @@ pthread * pthread::self () { pthread *thread = get_tls_self_pointer (); - if (thread) - return thread; - return pthread_null::get_null_pthread (); + if (!thread) + { + thread = pthread_null::get_null_pthread (); + set_tls_self_pointer (thread); + } + return thread; } pthread * @@ -209,6 +206,13 @@ pthread::get_tls_self_pointer () return _my_tls.tid; } +void +pthread::set_tls_self_pointer (pthread *thread) +{ + thread->cygtls = &_my_tls; + _my_tls.tid = thread; +} + List pthread::threads; /* member methods */ diff --git a/winsup/cygwin/thread.h b/winsup/cygwin/thread.h index ac08cdfde0..b560f73dd8 100644 --- a/winsup/cygwin/thread.h +++ b/winsup/cygwin/thread.h @@ -373,7 +373,7 @@ public: pthread (); virtual ~pthread (); - static void init_mainthread (const bool forked = false); + static void init_mainthread (); static bool is_good_object(pthread_t const *); static void atforkprepare(); static void atforkparent(); @@ -447,9 +447,9 @@ private: void pop_all_cleanup_handlers (void); void precreate (pthread_attr *); void postcreate (); - void set_tls_self_pointer (); bool create_cancel_event (); static pthread *get_tls_self_pointer (); + static void set_tls_self_pointer (pthread *); void cancel_self (); DWORD get_thread_id (); }; -- 2.11.0