diff --git a/src/core/ext/filters/client_channel/client_channel.cc b/src/core/ext/filters/client_channel/client_channel.cc index b9a2908982a..b06c07ac14a 100644 --- a/src/core/ext/filters/client_channel/client_channel.cc +++ b/src/core/ext/filters/client_channel/client_channel.cc @@ -200,10 +200,14 @@ class ClientChannel::CallData { grpc_closure pick_closure_; // Accessed while holding ClientChannel::resolution_mu_. - bool service_config_applied_ = false; - bool queued_pending_resolver_result_ = false; - ClientChannel::ResolverQueuedCall resolver_queued_call_; - ResolverQueuedCallCanceller* resolver_call_canceller_ = nullptr; + bool service_config_applied_ ABSL_GUARDED_BY(&ClientChannel::resolution_mu_) = + false; + bool queued_pending_resolver_result_ + ABSL_GUARDED_BY(&ClientChannel::resolution_mu_) = false; + ClientChannel::ResolverQueuedCall resolver_queued_call_ + ABSL_GUARDED_BY(&ClientChannel::resolution_mu_); + ResolverQueuedCallCanceller* resolver_call_canceller_ + ABSL_GUARDED_BY(&ClientChannel::resolution_mu_) = nullptr; std::function on_call_committed_; @@ -567,11 +571,13 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface { } // Caller must be holding the data-plane mutex. - ConnectedSubchannel* connected_subchannel_in_data_plane() const { + ConnectedSubchannel* connected_subchannel_in_data_plane() const + ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_) { return connected_subchannel_in_data_plane_.get(); } void set_connected_subchannel_in_data_plane( - RefCountedPtr connected_subchannel) { + RefCountedPtr connected_subchannel) + ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_) { connected_subchannel_in_data_plane_ = std::move(connected_subchannel); } @@ -727,7 +733,8 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface { // To be accessed only in the control plane work_serializer. RefCountedPtr connected_subchannel_; // To be accessed only in the data plane mutex. - RefCountedPtr connected_subchannel_in_data_plane_; + RefCountedPtr connected_subchannel_in_data_plane_ + ABSL_GUARDED_BY(&ClientChannel::data_plane_mu_); }; // diff --git a/src/core/ext/filters/client_channel/client_channel.h b/src/core/ext/filters/client_channel/client_channel.h index ff42817c9f1..2c36591bd73 100644 --- a/src/core/ext/filters/client_channel/client_channel.h +++ b/src/core/ext/filters/client_channel/client_channel.h @@ -456,14 +456,18 @@ class ClientChannel::LoadBalancedCall grpc_closure pick_closure_; // Accessed while holding ClientChannel::data_plane_mu_. - ClientChannel::LbQueuedCall queued_call_; - bool queued_pending_lb_pick_ = false; - const LoadBalancingPolicy::BackendMetricData* backend_metric_data_ = nullptr; + ClientChannel::LbQueuedCall queued_call_ + ABSL_GUARDED_BY(&ClientChannel::data_plane_mu_); + bool queued_pending_lb_pick_ ABSL_GUARDED_BY(&ClientChannel::data_plane_mu_) = + false; + LbQueuedCallCanceller* lb_call_canceller_ + ABSL_GUARDED_BY(&ClientChannel::data_plane_mu_) = nullptr; + RefCountedPtr connected_subchannel_; + const LoadBalancingPolicy::BackendMetricData* backend_metric_data_ = nullptr; std::function lb_recv_trailing_metadata_ready_; - LbQueuedCallCanceller* lb_call_canceller_ = nullptr; RefCountedPtr subchannel_call_;