diff options
author | shakurov <shakurov@yandex-team.com> | 2023-09-20 13:16:24 +0300 |
---|---|---|
committer | shakurov <shakurov@yandex-team.com> | 2023-09-20 14:21:22 +0300 |
commit | 48ad4a607d0da4ead79c2b44ac45b64a4e67911a (patch) | |
tree | 98acf6ecc0313131d10861d8990d688f7eb5dea8 | |
parent | 85d8b03e2d1f8527952a3dde8f9cb561424358b0 (diff) | |
download | ydb-48ad4a607d0da4ead79c2b44ac45b64a4e67911a.tar.gz |
YT-20015: Fix leaking request processing callbacks in TRequestQueue::ScheduleRequestsFromQueue.
-rw-r--r-- | yt/yt/core/rpc/service_detail.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/yt/yt/core/rpc/service_detail.cpp b/yt/yt/core/rpc/service_detail.cpp index 54b62e43f91..a7420b8f31a 100644 --- a/yt/yt/core/rpc/service_detail.cpp +++ b/yt/yt/core/rpc/service_detail.cpp @@ -1299,12 +1299,16 @@ void TRequestQueue::ScheduleRequestsFromQueue() while (QueueSize_.load() > 0 && Concurrency_.load() < concurrencyLimit) { if (AreThrottlersOverdrafted()) { SubscribeToThrottlers(); - break; + return; } TServiceBase::TServiceContextPtr context; - if (!Queue_.try_dequeue(context)) { - break; + while (!Queue_.try_dequeue(context)) { + // False negatives are possible in Moody Camel. + if (QueueSize_.load() > 0) { + continue; + } + return; } DecrementQueueSize(); |