fix refcounting

pull/36355/head
Craig Tiller 11 months ago
parent 6ebe35dbb8
commit aa7c41cd9b
  1. 15
      src/core/ext/filters/server_config_selector/server_config_selector_filter.cc
  2. 11
      src/core/resolver/xds/xds_resolver.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(

@ -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(

Loading…
Cancel
Save