Skip to content

Commit 775af71

Browse files
author
coteeq
committed
YT-22582: Break ref cycle in throttle requests
135589354d7ed8fc9f058ca7a64c121527eb9b85
1 parent 4cc6bfa commit 775af71

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

yt/yt/core/concurrency/throughput_throttler.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,7 @@ class TReconfigurableThroughputThrottler
316316
amount,
317317
request->TraceContext->GetTraceId());
318318

319-
promise.OnCanceled(BIND([weakRequest = MakeWeak(request), amount, this, this_ = MakeStrong(this)] (const TError& error) {
319+
promise.OnCanceled(BIND([weakRequest = MakeWeak(request), amount, this, weakThis = MakeWeak(this)] (const TError& error) {
320320
auto request = weakRequest.Lock();
321321
if (request && !request->Set.test_and_set()) {
322322
NTracing::TTraceContextFinishGuard guard(std::move(request->TraceContext));
@@ -325,8 +325,12 @@ class TReconfigurableThroughputThrottler
325325
amount);
326326
request->Promise.Set(TError(NYT::EErrorCode::Canceled, "Throttled request canceled")
327327
<< error);
328-
QueueTotalAmount_ -= amount;
329-
QueueSizeGauge_.Update(QueueTotalAmount_);
328+
329+
// NB(coteeq): Weak ref will break cycle "promise -> this -> request -> promise"
330+
if (auto this_ = weakThis.Lock()) {
331+
QueueTotalAmount_ -= amount;
332+
QueueSizeGauge_.Update(QueueTotalAmount_);
333+
}
330334
}
331335
}));
332336
request->Promise = std::move(promise);

0 commit comments

Comments
 (0)