summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/dll_init.cc
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2011-05-04 16:02:45 +0000
committerChristopher Faylor <me@cgf.cx>2011-05-04 16:02:45 +0000
commit3521d504804b8c43c93ade54c67716308c0c7d03 (patch)
treed9eed25ee66b3267167bd738bb38aebde0a4d8ab /winsup/cygwin/dll_init.cc
parent54e4df33a23064c542eacd7f7e3598935d9c3100 (diff)
downloadcygnal-3521d504804b8c43c93ade54c67716308c0c7d03.tar.gz
cygnal-3521d504804b8c43c93ade54c67716308c0c7d03.tar.bz2
cygnal-3521d504804b8c43c93ade54c67716308c0c7d03.zip
* dll_init.cc (dll_global_dtors): Avoid calling destructors during failing
fork().
Diffstat (limited to 'winsup/cygwin/dll_init.cc')
-rw-r--r--winsup/cygwin/dll_init.cc5
1 files changed, 5 insertions, 0 deletions
diff --git a/winsup/cygwin/dll_init.cc b/winsup/cygwin/dll_init.cc
index 85f3bae3f..99974944b 100644
--- a/winsup/cygwin/dll_init.cc
+++ b/winsup/cygwin/dll_init.cc
@@ -37,6 +37,11 @@ static bool dll_global_dtors_recorded;
void
dll_global_dtors ()
{
+ /* Don't attempt to call destructors if we're still in fork processing
+ since that likely means fork is failing and everything will not have been
+ set up. */
+ if (in_forkee)
+ return;
int recorded = dll_global_dtors_recorded;
dll_global_dtors_recorded = false;
if (recorded && dlls.start.next)