From aa7c41cd9b64d3019db1acede646c8b7405d1219 Mon Sep 17 00:00:00 2001 From: Craig Tiller <ctiller@google.com> Date: Mon, 15 Apr 2024 20:32:11 +0000 Subject: [PATCH] fix refcounting --- .../server_config_selector_filter.cc | 15 ++++++++------- src/core/resolver/xds/xds_resolver.cc | 11 +++-------- 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc b/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc index 9e13be0ab6b..0d37c5c646c 100644 --- a/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +++ b/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc @@ -50,10 +50,8 @@ namespace { class ServerConfigSelectorFilter final : public ImplementChannelFilter<ServerConfigSelectorFilter>, - public RefCounted<ServerConfigSelectorFilter> { + public InternallyRefCounted<ServerConfigSelectorFilter> { public: - ~ServerConfigSelectorFilter() override; - explicit ServerConfigSelectorFilter( RefCountedPtr<ServerConfigSelectorProvider> server_config_selector_provider); @@ -62,9 +60,11 @@ class ServerConfigSelectorFilter final ServerConfigSelectorFilter& operator=(const ServerConfigSelectorFilter&) = delete; - static absl::StatusOr<RefCountedPtr<ServerConfigSelectorFilter>> Create( + static absl::StatusOr<OrphanablePtr<ServerConfigSelectorFilter>> Create( const ChannelArgs& args, ChannelFilter::Args); + void Orphan() override; + class Call { public: absl::Status OnClientInitialMetadata(ClientMetadata& md, @@ -104,7 +104,7 @@ class ServerConfigSelectorFilter final config_selector_ ABSL_GUARDED_BY(mu_); }; -absl::StatusOr<RefCountedPtr<ServerConfigSelectorFilter>> +absl::StatusOr<OrphanablePtr<ServerConfigSelectorFilter>> ServerConfigSelectorFilter::Create(const ChannelArgs& args, ChannelFilter::Args) { ServerConfigSelectorProvider* server_config_selector_provider = @@ -112,7 +112,7 @@ ServerConfigSelectorFilter::Create(const ChannelArgs& args, if (server_config_selector_provider == nullptr) { return absl::UnknownError("No ServerConfigSelectorProvider object found"); } - return MakeRefCounted<ServerConfigSelectorFilter>( + return MakeOrphanable<ServerConfigSelectorFilter>( server_config_selector_provider->Ref()); } @@ -132,10 +132,11 @@ ServerConfigSelectorFilter::ServerConfigSelectorFilter( } } -ServerConfigSelectorFilter::~ServerConfigSelectorFilter() { +void ServerConfigSelectorFilter::Orphan() { if (server_config_selector_provider_ != nullptr) { server_config_selector_provider_->CancelWatch(); } + Unref(); } absl::Status ServerConfigSelectorFilter::Call::OnClientInitialMetadata( diff --git a/src/core/resolver/xds/xds_resolver.cc b/src/core/resolver/xds/xds_resolver.cc index 72e4139f3d4..13efe8a5099 100644 --- a/src/core/resolver/xds/xds_resolver.cc +++ b/src/core/resolver/xds/xds_resolver.cc @@ -317,12 +317,10 @@ class XdsResolver final : public Resolver { public: const static grpc_channel_filter kFilter; - explicit ClusterSelectionFilter(ChannelFilter::Args filter_args) - : filter_args_(filter_args) {} - static absl::StatusOr<std::unique_ptr<ClusterSelectionFilter>> Create( - const ChannelArgs& /* unused */, ChannelFilter::Args filter_args) { - return std::make_unique<ClusterSelectionFilter>(filter_args); + const ChannelArgs& /* unused */, + ChannelFilter::Args /* filter_args */) { + return std::make_unique<ClusterSelectionFilter>(); } // Construct a promise for one call. @@ -335,9 +333,6 @@ class XdsResolver final : public Resolver { static const NoInterceptor OnServerToClientMessage; static const NoInterceptor OnFinalize; }; - - private: - ChannelFilter::Args filter_args_; }; RefCountedPtr<ClusterRef> GetOrCreateClusterRef(