fix: output from different pids
Marcus Holland-Moritz [Wed, 3 Sep 2003 19:20:20 +0000 (21:20 +0200)]
From: "Marcus Holland-Moritz" <mhx-perl@gmx.net>
Message-ID: <005901c3723f$a7914f10$0c2f1fac@R2D2>

p4raw-id: //depot/perl@21022

Porting/valgrindpp.pl

index 1e7c1f8..5078734 100644 (file)
@@ -196,8 +196,16 @@ sub filter {
   debug(1, "processing $test ($_)\n");
 
   # Get all the valgrind output lines
-  my @l = map { chomp; s/^==\d+==\s?//; $_ }
-          do { my $fh = new IO::File $_ or die "$0: cannot open $_ ($!)\n"; <$fh> };
+  my @l = do {
+    my $fh = new IO::File $_ or die "$0: cannot open $_ ($!)\n";
+    # Process outputs can interrupt each other, so sort by pid first
+    my %pid; local $_;
+    while (<$fh>) {
+      chomp;
+      s/^==(\d+)==\s?// and push @{$pid{$1}}, $_;
+    }
+    map @$_, values %pid;
+  };
 
   # Setup some useful regexes
   my $hexaddr  = '0x[[:xdigit:]]+';