From fbe696f865a0f69ca41dacb542d7ddd3726e04d2 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Fri, 3 May 2024 17:33:11 +0000 Subject: [PATCH] x --- .../event_engine/event_engine_test_utils.cc | 13 +------ test/core/test_util/build.cc | 37 ++++++++++++------- test/core/test_util/build.h | 3 ++ 3 files changed, 29 insertions(+), 24 deletions(-) diff --git a/test/core/event_engine/event_engine_test_utils.cc b/test/core/event_engine/event_engine_test_utils.cc index b6cc4224e0e..1de11122b19 100644 --- a/test/core/event_engine/event_engine_test_utils.cc +++ b/test/core/event_engine/event_engine_test_utils.cc @@ -41,16 +41,7 @@ #include "src/core/lib/gprpp/notification.h" #include "src/core/lib/gprpp/time.h" #include "src/core/lib/resource_quota/memory_quota.h" - -#if defined(__has_feature) -#if __has_feature(address_sanitizer) -#include -#define GRPC_FORCE_LEAK_CHECK() __lsan_do_leak_check() -#endif -#endif -#ifndef GRPC_FORCE_LEAK_CHECK -#define GRPC_FORCE_LEAK_CHECK() -#endif +#include "test/core/test_util/build.h" // IWYU pragma: no_include @@ -90,7 +81,7 @@ void WaitForSingleOwner(std::shared_ptr engine) { int n = 0; while (engine.use_count() > 1) { ++n; - if (n == 500) GRPC_FORCE_LEAK_CHECK(); + if (n == 100) AsanAssertNoLeaks(); GRPC_LOG_EVERY_N_SEC(2, GPR_INFO, "engine.use_count() = %ld", engine.use_count()); absl::SleepFor(absl::Milliseconds(100)); diff --git a/test/core/test_util/build.cc b/test/core/test_util/build.cc index 04d39e9574d..7347e4d400b 100644 --- a/test/core/test_util/build.cc +++ b/test/core/test_util/build.cc @@ -12,6 +12,25 @@ // See the License for the specific language governing permissions and // limitations under the License. +#include "build.h" +#if defined(__has_feature) +#if __has_feature(address_sanitizer) +#define GRPC_BUILD_HAS_ASAN 1 +#else +#define GRPC_BUILD_HAS_ASAN 0 +#endif +#else +#ifdef ADDRESS_SANITIZER +#define GRPC_BUILD_HAS_ASAN 1 +#else +#define GRPC_BUILD_HAS_ASAN 0 +#endif +#endif + +#if GRPC_BUILD_HAS_ASAN +#include +#endif + bool BuiltUnderValgrind() { #ifdef RUNNING_ON_VALGRIND return true; @@ -36,19 +55,11 @@ bool BuiltUnderTsan() { #endif } -bool BuiltUnderAsan() { -#if defined(__has_feature) -#if __has_feature(address_sanitizer) - return true; -#else - return false; -#endif -#else -#ifdef ADDRESS_SANITIZER - return true; -#else - return false; -#endif +bool BuiltUnderAsan() { return GRPC_BUILD_HAS_ASAN != 0; } + +void AsanAssertNoLeaks() { +#if GRPC_BUILD_HAS_ASAN + __lsan_do_leak_check(); #endif } diff --git a/test/core/test_util/build.h b/test/core/test_util/build.h index 20bc21954ff..8574dfe8d3c 100644 --- a/test/core/test_util/build.h +++ b/test/core/test_util/build.h @@ -30,4 +30,7 @@ bool BuiltUnderMsan(); // Returns whether this is built under UndefinedBehaviorSanitizer bool BuiltUnderUbsan(); +// Force a leak check if built under ASAN. If there are leaks, crash. +void AsanAssertNoLeaks(); + #endif // GRPC_TEST_CORE_TEST_UTIL_BUILD_H