diff options
Diffstat (limited to 'winsup/cygwin/fork.cc')
-rw-r--r-- | winsup/cygwin/fork.cc | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/winsup/cygwin/fork.cc b/winsup/cygwin/fork.cc index 13cccba3e..4f481b0f8 100644 --- a/winsup/cygwin/fork.cc +++ b/winsup/cygwin/fork.cc @@ -244,15 +244,15 @@ frok::child (void *) ForceCloseHandle1 (fork_info->forker_finished, forker_finished); - _my_tls.fixup_after_fork (); sigproc_init (); pthread::atforkchild (); fixup_timers_after_fork (); - fixup_hooks_after_fork (); cygbench ("fork-child"); ld_preload (); + fixup_hooks_after_fork (); cygwin_finished_initializing = true; + _my_tls.fixup_after_fork (); return 0; } @@ -562,7 +562,10 @@ fork () grouped.first_dll = NULL; grouped.load_dlls = 0; + int res; void *esp; + int ischild; + __asm__ volatile ("movl %%esp,%0": "=r" (esp)); myself->set_has_pgid_children (); @@ -576,8 +579,7 @@ fork () } sig_send (NULL, __SIGHOLD); - int res; - int ischild = setjmp (grouped.ch.jmp); + ischild = setjmp (grouped.ch.jmp); if (!ischild) res = grouped.parent (esp); else |