+
+ if (not defined $failure) {
+ $failure = 'FAILED--no leader found' unless $seen_leader;
+ }
+
+ if ($ENV{PERL_VALGRIND}) {
+ my @valgrind;
+ if (-e $valgrind_log) {
+ if (open(V, $valgrind_log)) {
+ @valgrind = <V>;
+ close V;
+ } else {
+ warn "$0: Failed to open '$valgrind_log': $!\n";
+ }
+ }
+ if ($ENV{VG_OPTS} =~ /cachegrind/) {
+ if (rename $valgrind_log, "$test.valgrind") {
+ $valgrind++;
+ } else {
+ warn "$0: Failed to create '$test.valgrind': $!\n";
+ }
+ }
+ elsif (@valgrind) {
+ my $leaks = 0;
+ my $errors = 0;
+ for my $i (0..$#valgrind) {
+ local $_ = $valgrind[$i];
+ if (/^==\d+== ERROR SUMMARY: (\d+) errors? /) {
+ $errors += $1; # there may be multiple error summaries
+ } elsif (/^==\d+== LEAK SUMMARY:/) {
+ for my $off (1 .. 4) {
+ if ($valgrind[$i+$off] =~
+ /(?:lost|reachable):\s+\d+ bytes in (\d+) blocks/) {
+ $leaks += $1;
+ }
+ }
+ }
+ }
+ if ($errors or $leaks) {
+ if (rename $valgrind_log, "$test.valgrind") {
+ $valgrind++;
+ } else {
+ warn "$0: Failed to create '$test.valgrind': $!\n";
+ }
+ }
+ } else {
+ warn "No valgrind output?\n";
+ }
+ if (-e $valgrind_log) {
+ unlink $valgrind_log
+ or warn "$0: Failed to unlink '$valgrind_log': $!\n";
+ }
+ }