summaryrefslogtreecommitdiffstats
path: root/library/cpp
diff options
context:
space:
mode:
Diffstat (limited to 'library/cpp')
-rw-r--r--library/cpp/unified_agent_client/client_impl.cpp23
1 files changed, 16 insertions, 7 deletions
diff --git a/library/cpp/unified_agent_client/client_impl.cpp b/library/cpp/unified_agent_client/client_impl.cpp
index ffe16d8da37..dc4241344ff 100644
--- a/library/cpp/unified_agent_client/client_impl.cpp
+++ b/library/cpp/unified_agent_client/client_impl.cpp
@@ -8,6 +8,7 @@
#include <contrib/libs/grpc/src/core/lib/iomgr/executor.h>
#include <util/charset/utf8.h>
+#include <util/generic/scope.h>
#include <util/generic/size_literals.h>
#include <util/system/env.h>
@@ -513,14 +514,22 @@ namespace NUnifiedAgent::NPrivate {
}
void TClientSession::CheckGrpcCallInactivity() {
- with_lock(Lock) {
- if (Closed || !Started) {
- return;
- }
- const auto timeout = Client->GetParameters().GrpcCallInactivityTimeout;
- if (timeout == TDuration::Zero()) {
- return;
+ if (!Lock.TryAcquire()) {
+ TSpinWait sw;
+
+ while (Lock.IsLocked() || !Lock.TryAcquire()) {
+ if (ForkInProgress.load()) {
+ return;
+ }
+ sw.Sleep();
}
+ }
+ Y_DEFER {
+ Lock.Release();
+ };
+
+ const auto timeout = Client->GetParameters().GrpcCallInactivityTimeout;
+ if (!Closed && Started && timeout != TDuration::Zero()) {
if (NegotiatedProtocol.Defined() && *NegotiatedProtocol > 0 &&
ActiveGrpcCall &&
!CloseStarted &&