[compiler-rt] c0dc134 - [tsan] Lock/Unlock allocator and stacks on fork (#96600)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 25 10:05:31 PDT 2024
Author: Vitaly Buka
Date: 2024-06-25T10:05:25-07:00
New Revision: c0dc134de56f0fa25b942c9db1b1852b1da9ee51
URL: https://github.com/llvm/llvm-project/commit/c0dc134de56f0fa25b942c9db1b1852b1da9ee51
DIFF: https://github.com/llvm/llvm-project/commit/c0dc134de56f0fa25b942c9db1b1852b1da9ee51.diff
LOG: [tsan] Lock/Unlock allocator and stacks on fork (#96600)
We do that for other Sanitizers, and we
should do the same for TSAN.
There are know deadlocks reports here.
Added:
Modified:
compiler-rt/lib/tsan/rtl/tsan_mman.cpp
compiler-rt/test/sanitizer_common/TestCases/Posix/fork_threaded.c
Removed:
################################################################################
diff --git a/compiler-rt/lib/tsan/rtl/tsan_mman.cpp b/compiler-rt/lib/tsan/rtl/tsan_mman.cpp
index 1e579c6a020e9..e129e9af272f5 100644
--- a/compiler-rt/lib/tsan/rtl/tsan_mman.cpp
+++ b/compiler-rt/lib/tsan/rtl/tsan_mman.cpp
@@ -17,6 +17,7 @@
#include "sanitizer_common/sanitizer_common.h"
#include "sanitizer_common/sanitizer_errno.h"
#include "sanitizer_common/sanitizer_placement_new.h"
+#include "sanitizer_common/sanitizer_stackdepot.h"
#include "tsan_flags.h"
#include "tsan_interface.h"
#include "tsan_report.h"
@@ -119,9 +120,18 @@ ScopedGlobalProcessor::~ScopedGlobalProcessor() {
void AllocatorLockBeforeFork() SANITIZER_NO_THREAD_SAFETY_ANALYSIS {
global_proc()->internal_alloc_mtx.Lock();
InternalAllocatorLock();
+#if !SANITIZER_APPLE
+ // OS X allocates from hooks, see 6a3958247a.
+ allocator()->ForceLock();
+ StackDepotLockBeforeFork();
+#endif
}
void AllocatorUnlockAfterFork(bool child) SANITIZER_NO_THREAD_SAFETY_ANALYSIS {
+#if !SANITIZER_APPLE
+ StackDepotUnlockAfterFork(child);
+ allocator()->ForceUnlock();
+#endif
InternalAllocatorUnlock();
global_proc()->internal_alloc_mtx.Unlock();
}
diff --git a/compiler-rt/test/sanitizer_common/TestCases/Posix/fork_threaded.c b/compiler-rt/test/sanitizer_common/TestCases/Posix/fork_threaded.c
index 13240234a1c79..27b67db0c0a38 100644
--- a/compiler-rt/test/sanitizer_common/TestCases/Posix/fork_threaded.c
+++ b/compiler-rt/test/sanitizer_common/TestCases/Posix/fork_threaded.c
@@ -6,9 +6,6 @@
// FIXME: It probably hangs on this platform.
// UNSUPPORTED: ppc
-// FIXME: TSAN does not lock allocator.
-// UNSUPPORTED: tsan
-
// FIXME: False stack overflow report
// UNSUPPORTED: android && asan
More information about the llvm-commits
mailing list