Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2004-04-10 04:53:25 +0400
committerChristopher Faylor <me@cgf.cx>2004-04-10 04:53:25 +0400
commit56a188d1f3c3fb3d38c380f0052c16c5ee046c9b (patch)
treeaf6abfca253634243d80ef0a4e5be86e4c0193ed
parent60210cc795bcea2e34ed668cc5bccff35ba43246 (diff)
* 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.
-rw-r--r--winsup/cygwin/ChangeLog12
-rw-r--r--winsup/cygwin/thread.cc34
-rw-r--r--winsup/cygwin/thread.h4
3 files changed, 33 insertions, 17 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index f457a5668..d7f7d2801 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,15 @@
+2004-04-09 Thomas Pfaff <tpfaff@gmx.net>
+
+ * 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 <pierre.humblet@ieee.org>
* path.cc (path_conv::check): Optimize symlink replacements.
diff --git a/winsup/cygwin/thread.cc b/winsup/cygwin/thread.cc
index 3652a91fa..56074425a 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> pthread::threads;
/* member methods */
diff --git a/winsup/cygwin/thread.h b/winsup/cygwin/thread.h
index ac08cdfde..b560f73dd 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 ();
};