libmemunreachable: fix long timeout on error
The collection thread should unblock the parent when it fails in order
to prevent a 100 second timeout delay. Also reduce the timeout to 30
seconds, and fix a few log messages.
Change-Id: I47f9ce4f645c453810fec57bef557c32a665eefb
diff --git a/libmemunreachable/MemUnreachable.cpp b/libmemunreachable/MemUnreachable.cpp
index cb3f1a5..eca26eb 100644
--- a/libmemunreachable/MemUnreachable.cpp
+++ b/libmemunreachable/MemUnreachable.cpp
@@ -224,16 +224,19 @@
// ptrace all the threads
if (!thread_capture.CaptureThreads()) {
+ continue_parent_sem.Post();
return 1;
}
// collect register contents and stacks
if (!thread_capture.CapturedThreadInfo(thread_info)) {
+ continue_parent_sem.Post();
return 1;
}
// snapshot /proc/pid/maps
if (!ProcessMappings(parent_pid, mappings)) {
+ continue_parent_sem.Post();
return 1;
}
@@ -306,7 +309,7 @@
// Wait for the collection thread to signal that it is ready to fork the
// heap walker process.
- continue_parent_sem.Wait(100s);
+ continue_parent_sem.Wait(30s);
// Re-enable malloc so the collection thread can fork.
}
@@ -347,7 +350,7 @@
std::ostringstream oss;
oss << " " << std::dec << size;
- oss << " bytes at ";
+ oss << " bytes unreachable at ";
oss << std::hex << begin;
oss << std::endl;
@@ -405,7 +408,7 @@
std::string GetUnreachableMemoryString(bool log_contents, size_t limit) {
UnreachableMemoryInfo info;
if (!GetUnreachableMemory(info, limit)) {
- return "Failed to get unreachable memory";
+ return "Failed to get unreachable memory\n";
}
return info.ToString(log_contents);