When doing leak checks, don't poke around in device segments as this
may hang the entire machine. (Tom Hughes).
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5990 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/memcheck/mc_leakcheck.c b/memcheck/mc_leakcheck.c
index 3f921cc..8d30713 100644
--- a/memcheck/mc_leakcheck.c
+++ b/memcheck/mc_leakcheck.c
@@ -763,6 +763,21 @@
continue;
if (seg->isCH)
continue;
+
+ /* Don't poke around in device segments as this may cause
+ hangs. Exclude /dev/zero just in case someone allocated
+ memory by explicitly mapping /dev/zero. */
+ if (seg->kind == SkFileC
+ && (VKI_S_ISCHR(seg->mode) || VKI_S_ISBLK(seg->mode))) {
+ HChar* dev_name = VG_(am_get_filename)( seg );
+ if (dev_name && 0 == VG_(strcmp)(dev_name, "/dev/zero")) {
+ /* don't skip /dev/zero */
+ } else {
+ /* skip this device mapping */
+ continue;
+ }
+ }
+
if (0)
VG_(printf)("ACCEPT %2d %p %p\n", i, seg->start, seg->end);
lc_scan_memory(seg->start, seg->end+1 - seg->start);