Chromium Code Reviews
|
| OLD | NEW |
|---|---|
| (Empty) | |
| 1 #!/usr/bin/python | |
|
Christian Plesner Hansen
2009/03/11 15:12:54
Copyright?
| |
| 2 | |
| 3 # Simple wrapper for running valgrind and checking the output on | |
| 4 # stderr for memory leaks. | |
| 5 | |
| 6 import subprocess | |
| 7 import sys | |
| 8 import re | |
| 9 | |
| 10 VALGRIND_ARGUMENTS = [ | |
| 11 'valgrind', | |
| 12 '--error-exitcode=1', | |
| 13 '--leak-check=full', | |
| 14 '--smc-check=all' | |
| 15 ] | |
| 16 | |
| 17 # Compute the command line. | |
| 18 command = VALGRIND_ARGUMENTS + sys.argv[1:] | |
| 19 | |
| 20 # Run valgrind. | |
| 21 process = subprocess.Popen(command, stderr=subprocess.PIPE) | |
| 22 code = process.wait(); | |
| 23 errors = process.stderr.readlines(); | |
| 24 | |
| 25 # If valgrind produced an error, we report that to the user. | |
| 26 if code != 0: | |
| 27 sys.stderr.writelines(errors) | |
| 28 sys.exit(code) | |
| 29 | |
| 30 # Look through the leak details and make sure that we don't | |
| 31 # have any definitely, indirectly, and possibly lost bytes. | |
| 32 LEAK_LINE = re.compile(r"definitely lost: \d+ bytes in \d+ blocks.|" | |
| 33 "indirectly lost: \d+ bytes in \d+ blocks.|" | |
| 34 " possibly lost: \d+ bytes in \d+ blocks.") | |
|
Christian Plesner Hansen
2009/03/11 15:12:54
Any reason not to use r"(?:definitely|indirectly|p
| |
| 35 LEAK_OKAY = re.compile(r"lost: 0 bytes in 0 blocks.") | |
| 36 leaks = [] | |
| 37 for line in errors: | |
|
Christian Plesner Hansen
2009/03/11 15:12:54
Simpler might be to use re.findall.
| |
| 38 if LEAK_LINE.search(line): | |
| 39 leaks.append(line) | |
| 40 if not LEAK_OKAY.search(line): | |
| 41 sys.stderr.writelines(errors) | |
| 42 sys.exit(1) | |
| 43 | |
| 44 # Make sure we found between 2 and 3 leak lines. | |
| 45 if len(leaks) < 2 or len(leaks) > 3: | |
| 46 sys.stderr.writelines(errors) | |
| 47 sys.stderr.write('\n\n#### Malformed valgrind output.\n#### Exiting.\n') | |
| 48 sys.exit(1) | |
| 49 | |
| 50 # No leaks found. | |
| 51 sys.exit(0) | |
| OLD | NEW |