diff options
author | Christopher Faylor <me@cgf.cx> | 2006-07-14 22:15:12 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2006-07-14 22:15:12 +0000 |
commit | fbadc634cb3a805c94fd71d4136291b51784cd04 (patch) | |
tree | 84fca13db58b9dc1cbc687d06e58f4961abe75db /winsup/cygwin/fork.cc | |
parent | d9ceecd2d2d8c94f21468325384975c7308ad899 (diff) | |
download | cygnal-fbadc634cb3a805c94fd71d4136291b51784cd04.tar.gz cygnal-fbadc634cb3a805c94fd71d4136291b51784cd04.tar.bz2 cygnal-fbadc634cb3a805c94fd71d4136291b51784cd04.zip |
* fork.cc (fork): Lock the process before forking to prevent things like new
fds from being opened, etc.
* sync.h (lock_process::dont_bother): New function.
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 204362911..ed85e74cf 100644 --- a/winsup/cygwin/fork.cc +++ b/winsup/cygwin/fork.cc @@ -533,6 +533,7 @@ fork () return -1; } + lock_process now; if (sig_send (NULL, __SIGHOLD)) { if (exit_state) @@ -547,7 +548,10 @@ fork () __asm__ volatile ("movl %%esp,%0": "=r" (esp)); if (ischild) - res = grouped.child (esp); + { + res = grouped.child (esp); + now.dont_bother (); + } else { res = grouped.parent (esp); |