]> sourceware.org Git - newlib-cygwin.git/commitdiff
fork: Don't copy _main_tls->local_clib from *_impure_ptr
authorCorinna Vinschen <corinna@vinschen.de>
Fri, 10 Mar 2017 19:44:53 +0000 (20:44 +0100)
committerCorinna Vinschen <corinna@vinschen.de>
Fri, 10 Mar 2017 19:44:53 +0000 (20:44 +0100)
So far we copy *_impure_ptr into _main_tls->local_clib if the child
process has been forked from a pthread.  But that's not required.
The local_clib area of the new thread is on the stack and the stack
gets copied from the parent anyway (in frok::parent).  So we only
have to make sure _main_tls is pointing to the right address and
do the simple post-fork thread init.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
winsup/cygwin/fork.cc

index ef5a26843f62e7071f47963c2906f05ff4fe5bf4..73a72f5308679f98104483c43dd4c1dcbe7dfd0c 100644 (file)
@@ -143,15 +143,11 @@ frok::child (volatile char * volatile here)
                myself->pid, myself->ppid, __builtin_frame_address (0));
   sigproc_printf ("hParent %p, load_dlls %d", hParent, load_dlls);
 
-  /* If we've played with the stack, stacksize != 0.  That means that
-     fork() was invoked from other than the main thread.  Make sure that
-     the threadinfo information is properly set up.  */
-  if (!fork_info->from_main)
+  /* Make sure threadinfo information is properly set up. */
+  if (&_my_tls != _main_tls)
     {
       _main_tls = &_my_tls;
       _main_tls->init_thread (NULL, NULL);
-      _main_tls->local_clib = *_impure_ptr;
-      _impure_ptr = &_main_tls->local_clib;
     }
 
   set_cygwin_privileges (hProcToken);
@@ -300,7 +296,6 @@ frok::parent (volatile char * volatile stack_here)
 
   ch.forker_finished = forker_finished;
 
-  ch.from_main = &_my_tls == _main_tls;
   ch.stackbase = NtCurrentTeb ()->Tib.StackBase;
   ch.stackaddr = NtCurrentTeb ()->DeallocationStack;
   if (!ch.stackaddr)
This page took 0.032997 seconds and 5 git commands to generate.