diff --git a/umd/level_zero_driver/source/context.cpp b/umd/level_zero_driver/source/context.cpp index a4d29fe..4025590 100644 --- a/umd/level_zero_driver/source/context.cpp +++ b/umd/level_zero_driver/source/context.cpp @@ -258,15 +258,21 @@ ResourceCleaner::ResourceCleaner(Context *ctx, std::chrono::milliseconds timeout , thread( [this](Context *ctx) { std::unique_lock lock(mutex); - auto timeout = std::chrono::time_point::max(); - while (action != Action::BREAK) { - if (cv.wait_until(lock, timeout) == std::cv_status::timeout) { - ctx->releaseMemory(); - timeout = std::chrono::time_point::max(); - } else if (action == Action::PRUNE_AFTER_TIMEOUT) { - timeout = std::chrono::steady_clock::now() + idleTimeout; + const auto noTimeout = + std::chrono::time_point::max(); + auto timeout = noTimeout; + while (action != Action::BREAK) { + if (timeout == noTimeout) { + cv.wait(lock); + } else if (cv.wait_until(lock, timeout) == std::cv_status::timeout) { + ctx->releaseMemory(); + timeout = noTimeout; + continue; + } + if (action == Action::PRUNE_AFTER_TIMEOUT) { + timeout = std::chrono::steady_clock::now() + idleTimeout; + } } - } }, ctx) {}