[fuzzer] Fix threaded stack printing
Reviewers: kcc
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D39397
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk/lib/fuzzer@317071 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/FuzzerLoop.cpp b/FuzzerLoop.cpp
index d3ac4ce..9bea05f 100644
--- a/FuzzerLoop.cpp
+++ b/FuzzerLoop.cpp
@@ -19,6 +19,7 @@
#include <algorithm>
#include <cstring>
#include <memory>
+#include <mutex>
#include <set>
#if defined(__has_include)
@@ -73,11 +74,14 @@
static MallocFreeTracer AllocTracer;
+static std::mutex MallocFreeStackMutex;
+
ATTRIBUTE_NO_SANITIZE_MEMORY
void MallocHook(const volatile void *ptr, size_t size) {
size_t N = AllocTracer.Mallocs++;
F->HandleMalloc(size);
if (int TraceLevel = AllocTracer.TraceLevel) {
+ std::lock_guard<std::mutex> Lock(MallocFreeStackMutex);
Printf("MALLOC[%zd] %p %zd\n", N, ptr, size);
if (TraceLevel >= 2 && EF)
EF->__sanitizer_print_stack_trace();
@@ -88,6 +92,7 @@
void FreeHook(const volatile void *ptr) {
size_t N = AllocTracer.Frees++;
if (int TraceLevel = AllocTracer.TraceLevel) {
+ std::lock_guard<std::mutex> Lock(MallocFreeStackMutex);
Printf("FREE[%zd] %p\n", N, ptr);
if (TraceLevel >= 2 && EF)
EF->__sanitizer_print_stack_trace();