diff options
author | Christopher Faylor <me@cgf.cx> | 2004-03-07 04:57:47 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2004-03-07 04:57:47 +0000 |
commit | 3a1ccfc8c7e618eec1eb280a213282f1134eb2fb (patch) | |
tree | f394d22b8233c39ccb86f98b168cff560f9a7173 /winsup/cygwin/fork.cc | |
parent | 2942097ac20fab2d8237e9f7004cd2153b6ac0af (diff) | |
download | cygnal-3a1ccfc8c7e618eec1eb280a213282f1134eb2fb.tar.gz cygnal-3a1ccfc8c7e618eec1eb280a213282f1134eb2fb.tar.bz2 cygnal-3a1ccfc8c7e618eec1eb280a213282f1134eb2fb.zip |
* fork.cc (fork_parent): Save parent pid in a temporary variable since child
could conceivably exit before function returns, rendering the child's shared
memory area invalid.
* cygtls.h (_cygtls::incyg): Declare new field.
(_cygtls::in_exception): Define new function.
* exceptions.cc (setup_handler): Remove locked flag. Use 'incyg' flag and
in_exception function to determine when we're in a cygwin function.
(_cygtls::call_signal_handler): Decrement incyg flag prior to calling a
handler. Increment it on return.
* gendef (_sigfe): Increment incyg flag. Use testl for zero testing rather
than orl, for consistency.
(_sigbe): Decrement incyg flag. Use testl for zero testing rather than orl,
for consistency.
(_cygtls::pop): Use testl for zero testing rather than orl, for consistency.
(stabilize_sig_stack): Ditto.
Diffstat (limited to 'winsup/cygwin/fork.cc')
-rw-r--r-- | winsup/cygwin/fork.cc | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/winsup/cygwin/fork.cc b/winsup/cygwin/fork.cc index c26d2d678..0103b0dd3 100644 --- a/winsup/cygwin/fork.cc +++ b/winsup/cygwin/fork.cc @@ -512,6 +512,10 @@ fork_parent (HANDLE& hParent, dll *&first_dll, goto cleanup; } + int forked_pid; + + forked_pid = forked->pid; + /* Initialize things that are done later in dll_crt0_1 that aren't done for the forkee. */ strcpy (forked->progname, myself->progname); @@ -621,7 +625,7 @@ fork_parent (HANDLE& hParent, dll *&first_dll, pi.hThread = NULL; pthread::atforkparent (); - return forked->pid; + return forked_pid; /* Common cleanup code for failure cases */ cleanup: |