Module: tools Branch: master Commit: 4a01b75984f9120fe7b87881311b79f9c8b17d4b URL: http://source.winehq.org/git/tools.git/?a=commit;h=4a01b75984f9120fe7b878813...
Author: Alexandre Julliard julliard@winehq.org Date: Thu Jul 26 14:31:20 2012 +0200
patches: Avoid deadlocks when uncompressing large patches.
---
patches/filter | 14 ++++++++------ 1 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/patches/filter b/patches/filter index bed4dca..dbdb9ec 100755 --- a/patches/filter +++ b/patches/filter @@ -20,7 +20,7 @@
use strict; use Email::MIME; -use IPC::Open2; +use File::Temp; use Encode;
my $debug = 0; @@ -127,16 +127,18 @@ sub decode_parts(@) $name =~ /.bz2$/ || $name =~ /.gz$/) { - my $cmd = "gunzip -c"; + my ($file, $filename) = File::Temp::tempfile(); + my $cmd = "gunzip -c >$filename"; if ($type =~ /^application/x-bzip2/ || $name =~ /.bz2$/) { - $cmd = "bunzip2 -c"; + $cmd = "bunzip2 -c >$filename"; } - open2( *READ, *WRITE, $cmd) or die "cannot run $cmd"; + open WRITE, "|$cmd" or die "cannot run $cmd"; print WRITE $part->body; close WRITE; - push @lines, filter_patch(<READ>); - close READ; + push @lines, filter_patch(<$file>); + close $file; + unlink $filename; } elsif ($type =~ /^multipart/) {