delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2010/03/19/17:13:31

X-Recipient: archive-cygwin AT delorie DOT com
X-SWARE-Spam-Status: No, hits=-1.0 required=5.0 tests=AWL,BAYES_00
X-Spam-Check-By: sourceware.org
Subject: RE: Cygwin1.dll 1.7.1 causes ActivePerl 5.10 hang on gzip pipe close on Windows Server 2003
MIME-Version: 1.0
Date: Fri, 19 Mar 2010 15:13:14 -0700
Message-ID: <87336DA2FD996C4FAB2DE4988F20DD8CCBE305@SRV01.ghc.local>
In-Reply-To: <30FB0BA95FB54CEAAB93ACE5DFD7D427@ghc.local>
References: <87336DA2FD996C4FAB2DE4988F20DD8C9D4897 AT SRV01 DOT ghc DOT local> <30FB0BA95FB54CEAAB93ACE5DFD7D427 AT ghc DOT local>
From: "Matthew Kidd" <matthew DOT kidd AT ghctechnologies DOT com>
To: <cygwin AT cygwin DOT com>
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Unsubscribe: <mailto:cygwin-unsubscribe-archive-cygwin=delorie DOT com AT cygwin DOT com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com

>> I upgraded to Cygwin 1.7.1 on a (64-bit) Windows Server 2003 and
>> immediately ran into trouble. It seems that Perl can no longer
shutdown
>> pipes related to Cygwin executables. Here is some example code:
>>=20
>> #!/usr/bin/perl
>>=20
>> use strict;
>>=20
>> # my $fname =3D 'Y:\path\to\ratherbigfile.gz';
>> my $fname =3D '/cygdrive/y/path/to/ratherbigfile.gz';
>>=20
>> open(FH, "gzip -dc $fname |") || die 'open failed.';
>> for (1..4) { my $fline =3D <FH>; print $fline; }
>>=20
>> close(FH);
>> print "done\n";
>>=20=20
>>=20
>> Before Cygwin 1.7.1 this code ran fine. It printed out four lines,
closed
>> the pipe, and exited. But now it hangs at the close(FH) statement and
the
>> child gzip process maxes out a core continuing to uncompress the big
>> file. I either have to kill the gzip process or the Perl process.
This
>> problem happens whether I use a Windows style file path or a Unix
style
>> file path. It doesn't matter if I use 32-bit or 64-bit Perl.
>>=20
>> If I replace the cygwin1.dll file from the 1.7.1 installation with an
>> older version of cygwin1.dll from a different installation
(specifically
>> 1.5.25 cr-0x5f1), the code above works fine (though I imagine mixing
and
>> matching DLL version is not a good long term solution).

> Try the latest developer snapshot from http://cygwin.com/snapshots/
> fixes your problem.
>
> Corinna
>
> --=20
> Corinna Vinschen                  Please, send mails regarding Cygwin
to
> Cygwin Project Co-Leader          cygwin AT cygwin DOT com
> Red Hat

I had no luck with the 1.7.2 cygwin1.dll from the developer snapshot.
Since the 1.7.1 Cygwin package does not show this problem on a 32-bit
Windows 7 box I think it is a 64-bit architecture issue.

There is a subtle difference between the 32-bit and 64-bit Windows
architectures that might be the cause of the problem. Under 32-bit
Windows, the code above spawns a single gzip.exe child process. But on
64-bit Windows it spawns a gzip process which in turn spawns a gzip
process where the lowest level process is the one that seems to be doing
the work, i.e. is burning CPU. This behavior does not seem unique to the
Cygwin environment but rather has something to do with how Windows
handles legacy 32-bit applications in a 64-bit environment.

  - Matthew Kidd


--
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

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019