This is the mail archive of the
cygwin-patches
mailing list for the Cygwin project.
Re: Improvements to fork handling (1/5)
- From: Ryan Johnson <ryan dot johnson at cs dot utoronto dot ca>
- To: cygwin-patches at cygwin dot com
- Date: Tue, 17 May 2011 07:14:12 -0400
- Subject: Re: Improvements to fork handling (1/5)
- References: <4DCAD5FB.9050508@cs.utoronto.ca>
Any feedback on these patches?
On 11/05/2011 2:31 PM, Ryan Johnson wrote:
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