OSDN Git Service

Throughout, revert ill-conceived replacement of hMainThread with
authorcorinna <corinna>
Mon, 21 Dec 2009 18:38:24 +0000 (18:38 +0000)
committercorinna <corinna>
Mon, 21 Dec 2009 18:38:24 +0000 (18:38 +0000)
GetCurrentThread/NtCurrentThread.
* dcrt0.cc (dll_crt0_0): Duplicate main thread handle to hMainThread
again.

winsup/cygwin/ChangeLog
winsup/cygwin/dcrt0.cc
winsup/cygwin/exceptions.cc
winsup/cygwin/globals.cc
winsup/cygwin/miscfuncs.cc

index 6889978..93c87ce 100644 (file)
@@ -1,3 +1,10 @@
+2009-12-21  Corinna Vinschen  <corinna@vinschen.de>
+
+       Throughout, revert ill-conceived replacement of hMainThread with
+       GetCurrentThread/NtCurrentThread.
+       * dcrt0.cc (dll_crt0_0): Duplicate main thread handle to hMainThread
+       again.
+
 2009-12-19  Corinna Vinschen  <corinna@vinschen.de>
 
        * fhandler_console.cc (__vt100_conv): Minor formatting change.
index 021703e..dfdc7d0 100644 (file)
@@ -695,6 +695,10 @@ dll_crt0_0 ()
   user_data->impure_ptr = _impure_ptr;
   user_data->impure_ptr_ptr = &_impure_ptr;
 
+  DuplicateHandle (GetCurrentProcess (), GetCurrentThread (),
+                  GetCurrentProcess (), &hMainThread,
+                  0, false, DUPLICATE_SAME_ACCESS);
+
   OpenProcessToken (GetCurrentProcess (), MAXIMUM_ALLOWED, &hProcToken);
   set_cygwin_privileges (hProcToken);
 
@@ -781,6 +785,8 @@ dll_crt0_1 (void *)
     small_printf ("cmalloc returns %p\n", cmalloc (HEAP_STR, n));
 #endif
 
+  ProtectHandle (hMainThread);
+
   cygheap->cwd.init ();
 
   /* Initialize pthread mainthread when not forked and it is safe to call new,
index 2e5a83b..e1bb705 100644 (file)
@@ -484,7 +484,7 @@ _cygtls::handle_exceptions (EXCEPTION_RECORD *e, exception_list *frame, CONTEXT
 
   if (debugging && ++debugging < 500000)
     {
-      SetThreadPriority (GetCurrentThread (), THREAD_PRIORITY_NORMAL);
+      SetThreadPriority (hMainThread, THREAD_PRIORITY_NORMAL);
       return 0;
     }
 
@@ -1307,7 +1307,7 @@ exit_sig:
     {
       CONTEXT c;
       c.ContextFlags = CONTEXT_FULL;
-      GetThreadContext (GetCurrentThread (), &c);
+      GetThreadContext (hMainThread, &c);
       use_tls->copy_context (&c);
       si.si_signo |= 0x80;
     }
index 04d7564..9554ac8 100644 (file)
@@ -18,6 +18,7 @@ details. */
 #include <malloc.h>
 #include <cygwin/version.h>
 
+HANDLE NO_COPY hMainThread;
 HANDLE NO_COPY hProcToken;
 HANDLE NO_COPY hProcImpToken;
 HMODULE NO_COPY cygwin_hmodule;
index 8602761..29b8159 100644 (file)
@@ -253,7 +253,7 @@ low_priority_sleep (DWORD secs)
       if (GetCurrentThreadId () == cygthread::main_thread_id)
        new_prio = THREAD_PRIORITY_LOWEST;
       else
-       new_prio = GetThreadPriority (GetCurrentThread ());
+       new_prio = GetThreadPriority (hMainThread);
 
       if (curr_prio != new_prio)
        /* Force any threads in normal priority to be scheduled */