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(