From 0281c0a564a33fa2445724fee21a0f2634793051 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Tue, 30 Apr 2024 23:44:31 -0700 Subject: [PATCH] Automated rollback of changelist 629617917. PiperOrigin-RevId: 629640196 --- src/core/lib/surface/call.cc | 9 ++++++++- test/core/xds/xds_client_test.cc | 15 ++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/core/lib/surface/call.cc b/src/core/lib/surface/call.cc index b2d09507c33..1f104385d93 100644 --- a/src/core/lib/surface/call.cc +++ b/src/core/lib/surface/call.cc @@ -353,12 +353,19 @@ void Call::HandleCompressionAlgorithmDisabled( } void Call::UpdateDeadline(Timestamp deadline) { - MutexLock lock(&deadline_mu_); + ReleasableMutexLock lock(&deadline_mu_); if (grpc_call_trace.enabled()) { gpr_log(GPR_DEBUG, "[call %p] UpdateDeadline from=%s to=%s", this, deadline_.ToString().c_str(), deadline.ToString().c_str()); } if (deadline >= deadline_) return; + if (deadline < Timestamp::Now()) { + lock.Release(); + CancelWithError(grpc_error_set_int( + absl::DeadlineExceededError("Deadline Exceeded"), + StatusIntProperty::kRpcStatus, GRPC_STATUS_DEADLINE_EXCEEDED)); + return; + } auto* const event_engine = channel()->event_engine(); if (deadline_ != Timestamp::InfFuture()) { if (!event_engine->Cancel(deadline_task_)) return; diff --git a/test/core/xds/xds_client_test.cc b/test/core/xds/xds_client_test.cc index 0b2ea9e864b..bc4959cc5c4 100644 --- a/test/core/xds/xds_client_test.cc +++ b/test/core/xds/xds_client_test.cc @@ -627,10 +627,12 @@ class XdsClientTest : public ::testing::Test { uint64_t>; using ServerFailureMap = std::map; - const ResourceUpdateMap& resource_updates_valid() const { + ResourceUpdateMap resource_updates_valid() const { + MutexLock lock(&mu_); return resource_updates_valid_; } - const ResourceUpdateMap& resource_updates_invalid() const { + ResourceUpdateMap resource_updates_invalid() const { + MutexLock lock(&mu_); return resource_updates_invalid_; } const ServerFailureMap& server_failures() const { return server_failures_; } @@ -640,6 +642,7 @@ class XdsClientTest : public ::testing::Test { absl::string_view resource_type, uint64_t num_resources_valid, uint64_t num_resources_invalid) override { + MutexLock lock(&mu_); auto key = std::make_pair(std::string(xds_server), std::string(resource_type)); if (num_resources_valid > 0) { @@ -651,12 +654,14 @@ class XdsClientTest : public ::testing::Test { } void ReportServerFailure(absl::string_view xds_server) override { + MutexLock lock(&mu_); ++server_failures_[std::string(xds_server)]; } - ResourceUpdateMap resource_updates_valid_; - ResourceUpdateMap resource_updates_invalid_; - ServerFailureMap server_failures_; + mutable Mutex mu_; + ResourceUpdateMap resource_updates_valid_ ABSL_GUARDED_BY(mu_); + ResourceUpdateMap resource_updates_invalid_ ABSL_GUARDED_BY(mu_); + ServerFailureMap server_failures_ ABSL_GUARDED_BY(mu_); }; using ResourceCounts =