aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbabenko <babenko@yandex-team.com>2024-10-08 00:50:22 +0300
committerbabenko <babenko@yandex-team.com>2024-10-08 01:10:49 +0300
commit851b2cd6a97e65d34b6d73702524523fdda7ea17 (patch)
tree979217f73c78b482d9839ed892c44f87cc5a856b
parent59fff1d6f1fd0c77de70e8193a0ffff3125b92b9 (diff)
downloadydb-851b2cd6a97e65d34b6d73702524523fdda7ea17.tar.gz
YT-22977: Add indirection to OnReplyBusTerminated to avoid recursive spinlock acquisition
commit_hash:4ea49eeeccf565166e2e386bbef7e53c970ec425
-rw-r--r--yt/yt/core/rpc/service_detail.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/yt/yt/core/rpc/service_detail.cpp b/yt/yt/core/rpc/service_detail.cpp
index d23ef9ba4c..9fcf0d7d8f 100644
--- a/yt/yt/core/rpc/service_detail.cpp
+++ b/yt/yt/core/rpc/service_detail.cpp
@@ -2183,10 +2183,12 @@ void TServiceBase::RegisterRequest(TServiceContext* context)
auto& replyBusData = it->second;
replyBusData.Contexts.insert(context);
if (inserted) {
- replyBusData.BusTerminationHandler = BIND_NO_PROPAGATE(
- &TServiceBase::OnReplyBusTerminated,
- MakeWeak(this),
- MakeWeak(replyBus.Get()));
+ replyBusData.BusTerminationHandler =
+ BIND_NO_PROPAGATE(
+ &TServiceBase::OnReplyBusTerminated,
+ MakeWeak(this),
+ MakeWeak(replyBus))
+ .Via(TDispatcher::Get()->GetHeavyInvoker());
replyBus->SubscribeTerminated(replyBusData.BusTerminationHandler);
}
}