From f1841527a9005bf8c1f64ab5ca5ad8e68d6e9524 Mon Sep 17 00:00:00 2001 From: Mateusz Jablonski Date: Fri, 1 Dec 2023 16:40:07 +0000 Subject: [PATCH] test: lower priority of alarm thread in Windows ULT notify alarm thread readiness by setting atomic bool Signed-off-by: Mateusz Jablonski --- .../common/os_interface/windows/signal_utils.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/shared/test/common/os_interface/windows/signal_utils.cpp b/shared/test/common/os_interface/windows/signal_utils.cpp index 753b87501d..06d7121412 100644 --- a/shared/test/common/os_interface/windows/signal_utils.cpp +++ b/shared/test/common/os_interface/windows/signal_utils.cpp @@ -73,7 +73,7 @@ int setAlarm(bool enableAlarm) { if (enableAlarm) { abortOnTimeout = true; - std::condition_variable threadStarted; + std::atomic threadStarted{false}; alarmThread = std::make_unique([&]() { auto currentUltIterationMaxTime = NEO::ultIterationMaxTime; auto ultIterationMaxTimeEnv = getenv("NEO_ULT_ITERATION_MAX_TIME"); @@ -82,12 +82,13 @@ int setAlarm(bool enableAlarm) { } unsigned int alarmTime = currentUltIterationMaxTime * ::testing::GTEST_FLAG(repeat); std::cout << "set timeout to: " << alarmTime << std::endl; - threadStarted.notify_all(); + threadStarted = true; std::chrono::high_resolution_clock::time_point startTime, endTime; std::chrono::milliseconds elapsedTime{}; startTime = std::chrono::high_resolution_clock::now(); do { std::this_thread::yield(); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); endTime = std::chrono::high_resolution_clock::now(); elapsedTime = std::chrono::duration_cast(endTime - startTime); if (!abortOnTimeout) { @@ -101,10 +102,11 @@ int setAlarm(bool enableAlarm) { abort(); } }); + SetThreadPriority(alarmThread->native_handle(), THREAD_PRIORITY_LOWEST); - std::mutex mtx; - std::unique_lock lock(mtx); - threadStarted.wait(lock); + while (!threadStarted.load()) { + std::this_thread::yield(); + } } return 0;