* 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.
This commit is contained in:
@ -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:
|
||||
|
Reference in New Issue
Block a user