This is the mail archive of the
cygwin
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
--
Corinna Vinschen Please, send mails regarding Cygwin to
Cygwin Maintainer cygwin AT cygwin DOT com
Red Hat
--
Problem reports: http://cygwin.com/problems.html
FAQ: http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple