summaryrefslogtreecommitdiff
path: root/scripts/test_leaks.pl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/test_leaks.pl')
-rwxr-xr-xscripts/test_leaks.pl60
1 files changed, 60 insertions, 0 deletions
diff --git a/scripts/test_leaks.pl b/scripts/test_leaks.pl
new file mode 100755
index 00000000..1fbc7b9e
--- /dev/null
+++ b/scripts/test_leaks.pl
@@ -0,0 +1,60 @@
+#!/usr/bin/perl
+
+# Copyright (c) 2003 America Online, Inc. All rights reserved.
+
+# A crude, simple script that looks at "loss record" (stacks) in valgrind
+# output, and if the stack contains any of the funcs to ignore, then it
+# skips that stack else the stack is printed.
+
+# syntax
+# test_leaks.pl <file containing funcs to ignore> <valgrind output file>
+
+
+$ignore_file = shift @ARGV;
+$valgrind_output = shift @ARGV;
+
+# gather funcs to ignore
+open(IN, "$ignore_file") || die "Unable to open file $ignore_file";
+$i=0;
+while(<IN>) {
+ chop;
+ $ignore[$i++] = $_;
+}
+close IN;
+
+# now walk through the valgrind output
+open(IN, "$valgrind_output") || die "Unable to open file $valgrind_output";
+while(<IN>) {
+ if (/==\d+==.*loss record.*\n/) {
+ $line=$_;
+ next;
+ } else {
+ if (/==\d+== \n/ && $line) {
+ $i=0;
+ $bad=0;
+ while ($ignore[$i]) {
+ if ($line =~ /$ignore[$i]/) {
+ #printf "STACK TO BE IGNORED : \n%s\n", $line;
+ $bad=1;
+ break;
+ }
+ $i++;
+ }
+
+ # if none of the patterns matched...
+ if ($bad==0) {
+ printf "STACK TO EXAMINE: \n%s\n", $line;
+ }
+
+ undef $line;
+ next;
+ }
+
+ if ($line) {
+ $line=$line.$_;
+ }
+
+ }
+}
+close IN;
+