From 6259028f10bfb7ac1c3571dadbed3debb129f502 Mon Sep 17 00:00:00 2001 From: "Mark D. Roth" Date: Wed, 31 Jan 2024 08:42:30 -0800 Subject: [PATCH] [retry] don't start a new call attempt if the timer was cancelled (#35729) Fixes #34844. Closes #35729 COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/35729 from markdroth:retry_fix 899cb370ba7cd4473535fa1c27661a9fd5457dcd PiperOrigin-RevId: 603060248 --- .../filters/client_channel/retry_filter_legacy_call_data.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/core/ext/filters/client_channel/retry_filter_legacy_call_data.cc b/src/core/ext/filters/client_channel/retry_filter_legacy_call_data.cc index 649526b04fd..67736895be6 100644 --- a/src/core/ext/filters/client_channel/retry_filter_legacy_call_data.cc +++ b/src/core/ext/filters/client_channel/retry_filter_legacy_call_data.cc @@ -2020,8 +2020,10 @@ void RetryFilter::LegacyCallData::OnRetryTimer() { void RetryFilter::LegacyCallData::OnRetryTimerLocked( void* arg, grpc_error_handle /*error*/) { auto* calld = static_cast(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"); }