aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/grpc/patches/pr35729_fix_retry_and_cancellation_race.patch
blob: c85b074dc349338f452a749d351a6f1ee77084d1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
--- contrib/libs/grpc/src/core/ext/filters/client_channel/retry_filter.cc	(index)
+++ contrib/libs/grpc/src/core/ext/filters/client_channel/retry_filter.cc	(working tree)
@@ -2603,8 +2603,10 @@ void RetryFilter::CallData::OnRetryTimer() {
 void RetryFilter::CallData::OnRetryTimerLocked(void* arg,
                                                grpc_error_handle /*error*/) {
   auto* calld = static_cast<CallData*>(arg);
-  calld->retry_timer_handle_.reset();
-  calld->CreateCallAttempt(/*is_transparent_retry=*/false);
+  if (calld->retry_timer_handle_.has_value()) {
+    calld->retry_timer_handle_.reset();
+    calld->CreateCallAttempt(/*is_transparent_retry=*/false);
+  }
   GRPC_CALL_STACK_UNREF(calld->owning_call_, "OnRetryTimer");
 }