summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2009-07-20 14:16:06 +0000
committerCorinna Vinschen <corinna@vinschen.de>2009-07-20 14:16:06 +0000
commit637a1aec8fba084c65b0afea3b49959917aaa253 (patch)
tree0a32adecd06f0588fa346109a821d5b033f35828
parent7bdb64ea18dbae79925d6a5dc69a665e8837982b (diff)
downloadcygnal-637a1aec8fba084c65b0afea3b49959917aaa253.tar.gz
cygnal-637a1aec8fba084c65b0afea3b49959917aaa253.tar.bz2
cygnal-637a1aec8fba084c65b0afea3b49959917aaa253.zip
* fork.cc (fork): Create local tmp_pathbuf. Explain why.
-rw-r--r--winsup/cygwin/ChangeLog4
-rw-r--r--winsup/cygwin/fork.cc5
2 files changed, 9 insertions, 0 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 54e65d1b0..9e78d09dd 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,7 @@
+2009-07-20 Corinna Vinschen <corinna@vinschen.de>
+
+ * fork.cc (fork): Create local tmp_pathbuf. Explain why.
+
2009-07-18 Christopher Faylor <me+cygwin@cgf.cx>
* exceptions.cc (sig_handle_tty_stop): Set stopsig to SIGCONT when
diff --git a/winsup/cygwin/fork.cc b/winsup/cygwin/fork.cc
index 6911da5cd..cdaaca649 100644
--- a/winsup/cygwin/fork.cc
+++ b/winsup/cygwin/fork.cc
@@ -580,6 +580,11 @@ fork ()
{
hold_everything held_everything (ischild);
+ /* This tmp_pathbuf constructor is required here because the below setjmp
+ magic will otherwise not restore the original buffer count values in
+ the thread-local storage. A process forking too deeply will run into
+ the problem to be out of temporary TLS path buffers. */
+ tmp_pathbuf tp;
if (!held_everything)
{