Improvements to fork handling (1/5)

Ryan Johnson ryan.johnson@cs.utoronto.ca
Wed May 11 18:31:00 GMT 2011


Hi all,

This is the first of a series of patches, sent in separate emails as 
requested.

The first patch allows a child which failed due to address space 
clobbers to report cleanly back to the parent. As a result, DLL_LINK 
which land wrong, DLL_LOAD whose space gets clobbered, and failure to 
replicate the cygheap, generate retries and dispense with the terminal 
spam. Handling of unexpected errors should not have changed. Further, 
the patch fixes several sources of access violations and crashes, 
including:
- accessing invalid state after failing to notice that a 
statically-linked dll loaded at the wrong location
- accessing invalid state while running dtors on a failed forkee. I 
follow cgf's approach of simply not running any dtors, based on the 
observation that dlls in the parent (gcc_s!) can store state about other 
dlls and crash trying to access that state in the child, even if they 
appeared to map properly in both processes.
- attempting to generate a stack trace when somebody in the call chain 
used alloca(). This one is only sidestepped here, because we eliminate 
the access violations and api_fatal calls which would have triggered the 
problematic stack traces. I have a separate patch which allows offending 
functions to disable stack traces, if folks are interested, but it was 
kind of noisy so I left it out for now (cygwin uses alloca pretty 
liberally!).

Ryan
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: fork-clean-exit.patch
URL: <http://cygwin.com/pipermail/cygwin-patches/attachments/20110511/883e3eaf/attachment.ksh>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: fork-clean-exit.changes
URL: <http://cygwin.com/pipermail/cygwin-patches/attachments/20110511/883e3eaf/attachment-0001.ksh>


More information about the Cygwin-patches mailing list