X-Spam-Check-By: sourceware.org Date: Thu, 20 Jul 2006 15:31:34 -0400 From: Christopher Faylor To: cygwin AT cygwin DOT com Subject: Re: Perl failure Message-ID: <20060720193134.GB14980@trixie.casa.cgf.cx> Reply-To: cygwin AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com References: <20060713180601 DOT GA3872 AT efn DOT org> <20060719100824 DOT GD18664 AT calimero DOT vinschen DOT de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20060719100824.GD18664@calimero.vinschen.de> User-Agent: Mutt/1.5.11 Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com On Wed, Jul 19, 2006 at 12:08:24PM +0200, Corinna Vinschen wrote: >On Jul 18 17:45, Bruce Dobrin wrote: >> Hi, >> I stripped down the code to a small testable bit. The problem seems to >> occur when I reach 256 forks on a cygwin1.5.18 or 19 but not on my >> cygwin1.5.5. win2k system. The original code give the forked process >> time to finish, but it still looks like it eats it after about 256 >> iterations ( it actually failed between 259 and 252 iterations, but >> it's pretty complicated so I'm not sure what else was happening). >> >> Here is my test code: >> dobrin AT tiburon:/tmp> cat test8.pl >> ################ >> #!/usr/bin/perl -w >> >> use strict; >> my $pid; >> >> foreach my $incr (`seq 1 1 800`) { >> >> unless (defined ($pid = fork)) { >> die " cannot fork $!"; >> } >> unless ($pid) { >> print " the sequence is $incr \n"; >> exit; >> } >> print "pid is $pid\n"; >> } >> >> ############### >> >> The error here is : >> cannot fork Resource temporarily unavailable at ./test8.pl line 11. >> panic: MUTEX_LOCK (45) [op.c:354]. >> >> On cygwin1.5.5 it finishes successfully. I'm not sure if there is >> anything else I can try, I'm looking around for some other machines >> with older cygwins on them to establish what version it stopped working >> in. > >Lots and lots of changes has been made between 1.5.5 and 1.5.20. I don't >recall what was different in relation to process handling, especially >because that's cgf's domain, not mine. > >But I can tell you that the above perl script is missing a crucial >point. The parent doesn't reap its children using wait. As a result, >the parent has references to its children which just add up, since it >gets no chance to drop the references. > >For quite some time each Cygwin process has a maximum number of 256 >active children. Actually, for 1.5.5, the limit was probably 62 or 63. cgf -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/