Alexandre Julliard : patches: Avoid deadlocks when uncompressing large patches.

Alexandre Julliard julliard at winehq.org
Thu Jul 26 08:37:18 CDT 2012


Module: tools
Branch: master
Commit: 4a01b75984f9120fe7b87881311b79f9c8b17d4b
URL:    http://source.winehq.org/git/tools.git/?a=commit;h=4a01b75984f9120fe7b87881311b79f9c8b17d4b

Author: Alexandre Julliard <julliard at 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/)
         {




More information about the wine-cvs mailing list