From: cgf Date: Tue, 30 Mar 2004 21:27:50 +0000 (+0000) Subject: * thread.h (pthread::init_mainthread): Add parameter forked. Set forked X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=2a31c0a03e007a64be9ffdc551dcf8795951c790;p=pf3gnuchains%2Fpf3gnuchains3x.git * thread.h (pthread::init_mainthread): Add parameter forked. Set forked default to false.. * thread.cc (MTinterface::fixup_after_fork): Call pthread::init_mainthread with forked = true. (pthread::init_mainthread): Add parameter forked. Do not change thread self pointer when forked. --- diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index b81057696d..9227f5cded 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,12 @@ +2004-03-30 Thomas Pfaff + + * thread.h (pthread::init_mainthread): Add parameter forked. Set + forked default to false.. + * thread.cc (MTinterface::fixup_after_fork): Call + pthread::init_mainthread with forked = true. + (pthread::init_mainthread): Add parameter forked. Do not change thread + self pointer when forked. + 2004-03-30 Corinna Vinschen * shm.cc (shmat): If shmid is unknown, call a special variation diff --git a/winsup/cygwin/thread.cc b/winsup/cygwin/thread.cc index a18834ddfc..3652a91fae 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 (); + pthread::init_mainthread (true); pthread::fixup_after_fork (); pthread_mutex::fixup_after_fork (); @@ -166,14 +166,19 @@ MTinterface::fixup_after_fork (void) /* static methods */ void -pthread::init_mainthread () +pthread::init_mainthread (const bool forked) { pthread *thread = get_tls_self_pointer (); if (!thread) { - thread = new pthread (); - if (!thread) - api_fatal ("failed to create mainthread object"); + if (forked) + thread = pthread_null::get_null_pthread (); + else + { + thread = new pthread (); + if (!thread) + api_fatal ("failed to create mainthread object"); + } } thread->cygtls = &_my_tls; diff --git a/winsup/cygwin/thread.h b/winsup/cygwin/thread.h index 02eac18992..ac08cdfde0 100644 --- a/winsup/cygwin/thread.h +++ b/winsup/cygwin/thread.h @@ -373,7 +373,7 @@ public: pthread (); virtual ~pthread (); - static void init_mainthread (); + static void init_mainthread (const bool forked = false); static bool is_good_object(pthread_t const *); static void atforkprepare(); static void atforkparent();