From 0c8ef41a5ec2b0a8fbb41d0ec88ae3afb58c23dc Mon Sep 17 00:00:00 2001 From: Yash Tibrewal Date: Wed, 3 Apr 2019 18:53:14 -0700 Subject: [PATCH] Remove smart pointers from global registry --- .../ext/filters/client_channel/service_config.cc | 6 +++--- .../ext/filters/client_channel/service_config.h | 13 ++++--------- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/core/ext/filters/client_channel/service_config.cc b/src/core/ext/filters/client_channel/service_config.cc index e01eb11fe98..46f34ac14a1 100644 --- a/src/core/ext/filters/client_channel/service_config.cc +++ b/src/core/ext/filters/client_channel/service_config.cc @@ -34,7 +34,7 @@ namespace grpc_core { int ServiceConfig::registered_parsers_count = 0; -UniquePtr +ServiceConfigParser ServiceConfig::registered_parsers[ServiceConfigParser::kMaxParsers]; RefCountedPtr ServiceConfig::Create(const char* json) { @@ -85,7 +85,7 @@ void ServiceConfig::ParseGlobalParams(const grpc_json* json_tree, GPR_DEBUG_ASSERT(json_tree_->key == nullptr); for (auto i = 0; i < registered_parsers_count; i++) { auto parsed_obj = - registered_parsers[i]->ParseGlobalParams(json_tree, success); + registered_parsers[i].ParseGlobalParams(json_tree, success); if (!*success) { return; } @@ -102,7 +102,7 @@ bool ServiceConfig::ParseJsonMethodConfigToServiceConfigObjectsTable( for (auto i = 0; i < registered_parsers_count; i++) { bool success; auto parsed_obj = - registered_parsers[i]->ParsePerMethodParams(json, &success); + registered_parsers[i].ParsePerMethodParams(json, &success); if (!success) { return false; } diff --git a/src/core/ext/filters/client_channel/service_config.h b/src/core/ext/filters/client_channel/service_config.h index acf618b3432..0a2fea9735f 100644 --- a/src/core/ext/filters/client_channel/service_config.h +++ b/src/core/ext/filters/client_channel/service_config.h @@ -176,17 +176,12 @@ class ServiceConfig : public RefCounted { /// registered parser. Each parser is responsible for reading the service /// config json and returning a parsed object. This parsed object can later be /// retrieved using the same index that was returned at registration time. - static int RegisterParser(UniquePtr func) { - registered_parsers[registered_parsers_count] = std::move(func); + static int RegisterParser(const ServiceConfigParser& parser) { + registered_parsers[registered_parsers_count] = parser; return registered_parsers_count++; } - static void ResetServiceConfigParsers() { - for (auto i = 0; i < ServiceConfigParser::kMaxParsers; i++) { - registered_parsers[i].reset(nullptr); - } - registered_parsers_count = 0; - } + static void ResetServiceConfigParsers() { registered_parsers_count = 0; } private: // So New() can call our private ctor. @@ -222,7 +217,7 @@ class ServiceConfig : public RefCounted { size_t* idx); static int registered_parsers_count; - static UniquePtr + static ServiceConfigParser registered_parsers[ServiceConfigParser::kMaxParsers]; UniquePtr service_config_json_;