[GWP-ASan] Fix atfork handlers being installed multiple times in tests
authorMitch Phillips <31459023+hctim@users.noreply.github.com>
Tue, 10 Jan 2023 18:16:03 +0000 (10:16 -0800)
committerMitch Phillips <31459023+hctim@users.noreply.github.com>
Tue, 10 Jan 2023 18:16:08 +0000 (10:16 -0800)
We incorrectly install the atfork handlers multiple times in the test
harness, tracked down to the default parameter used by
CheckLateInitIsOK. This manifested in a hang if running the tests with
--gtest_repeat={>=2} as the atfork handler ran multiple times, causing
double-lock and double-unlock, which on my machine hung.

Add a check-fail for this case as well to prevent this from happening
again (it was difficult to track down and is an easy mistake to make).

Differential Revision: https://reviews.llvm.org/D139731

compiler-rt/lib/gwp_asan/platform_specific/guarded_pool_allocator_posix.cpp

index adb7330..c036ebe 100644 (file)
@@ -98,6 +98,10 @@ size_t GuardedPoolAllocator::getPlatformPageSize() {
 }
 
 void GuardedPoolAllocator::installAtFork() {
+  static bool AtForkInstalled = false;
+  if (AtForkInstalled)
+    return;
+  AtForkInstalled = true;
   auto Disable = []() {
     if (auto *S = getSingleton())
       S->disable();