This is the mail archive of the
mailing list for the Cygwin project.
Re: make, PATH & "Win32 error 487"
- From: Corinna Vinschen <corinna-cygwin at cygwin dot com>
- To: cygwin at cygwin dot com
- Date: Thu, 23 May 2013 23:14:58 +0200
- Subject: Re: make, PATH & "Win32 error 487"
- References: <alpine dot LFD dot 2 dot 03 dot 1305230950500 dot 1918 at mcs dot anl dot gov> <20130523160711 dot GB25295 at calimero dot vinschen dot de>
- Reply-to: cygwin at cygwin dot com
On May 23 18:07, Corinna Vinschen wrote:
> On May 23 10:14, Satish Balay wrote:
> > [...]
> > - It appears to be related to the huge length of one of the commands - and
> > length of PATH
> > - I tried it on 3 different machines [with differences in default installed software]
> > win2008/x64 - breaks when PATH is over 1.5K chars
> > win2003/x32 - breaks when PATH is over 2K chars
> > win7/x32 - breaks when PATH is over 20K chars.
> > Any ideas on how to debug this further to better understand the issue
> > - or workarrounds? This is with latest cygwin [and rebaseall done
> > correctly]
> There's perhaps not much you can do. First of all, the problem is known
> for a while, but even though we're trying a lot of stuff to make sure
> that fork works, the OS has some funny notions sometimes, which make it
> hard to get fork 100% reliable.
> In this case, there's a subtil difference between the first shell
> started from make, and a forked subshell. The difference is something
> to do with the size of $PATH which results in a different position of
> the main stack in the forked child process. This breaks fork because
> fork semantics require to be able to reproduce the parent memory in the
> child process.
> Thanks for the test case. I'm just investigating what happens exactly,
> and I have a few ideas how we can workaround this problem to make fork
> a bit more reliable in this situation. This requires some fiddling
> around, so, just stay tuned for a couple of days.
After some experimenting, it looks like I found a surprisingly simple
solution. I checked in a patch to CVS, and I'm just generating a new
developer's snapshot. Please try the just uploaded today's snapshot
from http://cygwin.com/snapshots/ Exchanging just the DLL should be
sufficient. Please report back.
Btw., there's an upper bound for the size of a single environment
variable of about 32K. Right now, if $PATH reaches this size, forking
any further process fails silently. I don't know why yet, but as far
as I'm concerned this is no pressing issue.
Corinna Vinschen Please, send mails regarding Cygwin to
Cygwin Maintainer cygwin AT cygwin DOT com
Problem reports: http://cygwin.com/problems.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple