diff --git a/src/client/persqueue_public/impl/write_session.cpp b/src/client/persqueue_public/impl/write_session.cpp index 3ad3306449..ce1acde444 100644 --- a/src/client/persqueue_public/impl/write_session.cpp +++ b/src/client/persqueue_public/impl/write_session.cpp @@ -110,7 +110,7 @@ std::optional TSimpleBlockingWriteSession::WaitForToken(cons std::optional token = std::nullopt; - while (IsAlive() && remainingTime > TDuration::Zero()) { + do { Writer->WaitEvent().Wait(remainingTime); for (auto event : Writer->GetEvents()) { @@ -130,7 +130,7 @@ std::optional TSimpleBlockingWriteSession::WaitForToken(cons } remainingTime = timeout - (TInstant::Now() - startTime); - } + } while (IsAlive() && remainingTime > TDuration::Zero()); return std::nullopt; } diff --git a/src/client/topic/common/simple_blocking_helpers.h b/src/client/topic/common/simple_blocking_helpers.h index ddddb94056..7290497861 100644 --- a/src/client/topic/common/simple_blocking_helpers.h +++ b/src/client/topic/common/simple_blocking_helpers.h @@ -20,7 +20,7 @@ std::optional WaitForToken( std::optional token; - while (!closed.load() && remainingTime > TDuration::Zero()) { + do { writer.WaitEvent().Wait(remainingTime); for (auto event : writer.GetEvents(false, std::nullopt)) { @@ -40,7 +40,7 @@ std::optional WaitForToken( } remainingTime = timeout - (TInstant::Now() - startTime); - } + } while (!closed.load() && remainingTime > TDuration::Zero()); return std::nullopt; }