pr35729_fix_retry_and_cancellation_race.patch 749 B

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