summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/thread.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/thread.cc')
-rw-r--r--winsup/cygwin/thread.cc25
1 files changed, 16 insertions, 9 deletions
diff --git a/winsup/cygwin/thread.cc b/winsup/cygwin/thread.cc
index a6b2f9919..b2ba543fe 100644
--- a/winsup/cygwin/thread.cc
+++ b/winsup/cygwin/thread.cc
@@ -233,6 +233,7 @@ pthread::init_mainthread ()
0, FALSE, DUPLICATE_SAME_ACCESS))
thread->win32_obj_id = NULL;
thread->set_tls_self_pointer ();
+ (void) thread->create_cancel_event ();
thread->postcreate ();
}
@@ -282,6 +283,19 @@ pthread::~pthread ()
threads.remove (this);
}
+bool
+pthread::create_cancel_event ()
+{
+ cancel_event = ::CreateEvent (&sec_none_nih, TRUE, FALSE, NULL);
+ if (!cancel_event)
+ {
+ system_printf ("couldn't create cancel event for main thread, %E");
+ /* we need the event for correct behaviour */
+ return false;
+ }
+ return true;
+}
+
void
pthread::precreate (pthread_attr *newattr)
{
@@ -308,6 +322,8 @@ pthread::precreate (pthread_attr *newattr)
}
/* Change the mutex type to NORMAL to speed up mutex operations */
mutex.type = PTHREAD_MUTEX_NORMAL;
+ if (!create_cancel_event ())
+ magic = 0;
}
void
@@ -340,15 +356,6 @@ pthread::create (void *(*func) (void *), pthread_attr *newattr,
void
pthread::postcreate ()
{
- cancel_event = ::CreateEvent (&sec_none_nih, TRUE, FALSE, NULL);
- if (!cancel_event)
- {
- system_printf ("couldn't create cancel event for main thread, %E");
- /* we need the event for correct behaviour */
- magic = 0;
- return;
- }
-
valid = true;
InterlockedIncrement (&MT_INTERFACE->threadcount);