Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2004-03-07 07:57:47 +0300
committerChristopher Faylor <me@cgf.cx>2004-03-07 07:57:47 +0300
commit3a1ccfc8c7e618eec1eb280a213282f1134eb2fb (patch)
treef394d22b8233c39ccb86f98b168cff560f9a7173 /winsup/cygwin/fork.cc
parent2942097ac20fab2d8237e9f7004cd2153b6ac0af (diff)
* 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.cc6
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: