Browse Source

YT-22977: Add indirection to OnReplyBusTerminated to avoid recursive spinlock acquisition
commit_hash:4ea49eeeccf565166e2e386bbef7e53c970ec425

babenko 5 months ago
parent
commit
851b2cd6a9
1 changed files with 6 additions and 4 deletions
  1. 6 4
      yt/yt/core/rpc/service_detail.cpp

+ 6 - 4
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);
         }
     }