From 2a86a02bdd5688ebbeff3d406e1be0ca19dc3618 Mon Sep 17 00:00:00 2001 From: Marshall Greenblatt Date: Fri, 26 Jan 2024 12:58:17 -0500 Subject: [PATCH] ceftests: Avoid shutdown hang due to leaked TestHandlers --- tests/ceftests/run_all_unittests.cc | 12 +++++++++++- tests/ceftests/test_handler.h | 6 +++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/tests/ceftests/run_all_unittests.cc b/tests/ceftests/run_all_unittests.cc index ca96504f6..f67e7b330 100644 --- a/tests/ceftests/run_all_unittests.cc +++ b/tests/ceftests/run_all_unittests.cc @@ -77,7 +77,17 @@ void RunTestsOnTestThread() { CefTestSuite::GetInstance()->Run(); // Wait for all TestHandlers to be destroyed. - while (TestHandler::HasTestHandler()) { + size_t loop_count = 0; + while (true) { + const size_t handler_count = TestHandler::GetTestHandlerCount(); + if (handler_count == 0) { + break; + } + if (++loop_count == 20) { + LOG(ERROR) << "Terminating with " << handler_count + << " leaked TestHandler objects"; + break; + } sleep(100); } diff --git a/tests/ceftests/test_handler.h b/tests/ceftests/test_handler.h index bbb833423..8b801e377 100644 --- a/tests/ceftests/test_handler.h +++ b/tests/ceftests/test_handler.h @@ -211,9 +211,9 @@ class TestHandler : public CefClient, void OnWindowCreated(int browser_id); void OnWindowDestroyed(int browser_id); - // Returns true if a TestHandler currently exists. - static bool HasTestHandler() { - return test_handler_count_.load(std::memory_order_relaxed) > 0U; + // Returns the count of TestHandlers the currently exist. + static size_t GetTestHandlerCount() { + return test_handler_count_.load(std::memory_order_relaxed); } std::string debug_string_prefix() const { return debug_string_prefix_; }