diff options
Diffstat (limited to 'src/core/ext/client_config/resolver_result.c')
-rw-r--r-- | src/core/ext/client_config/resolver_result.c | 54 |
1 files changed, 32 insertions, 22 deletions
diff --git a/src/core/ext/client_config/resolver_result.c b/src/core/ext/client_config/resolver_result.c index 68f6f5bfb6..ac263b9a46 100644 --- a/src/core/ext/client_config/resolver_result.c +++ b/src/core/ext/client_config/resolver_result.c @@ -34,6 +34,7 @@ #include <string.h> #include <grpc/support/alloc.h> +#include <grpc/support/string_util.h> grpc_addresses* grpc_addresses_create(size_t num_addresses) { grpc_addresses* addresses = gpr_malloc(sizeof(grpc_addresses)); @@ -44,6 +45,13 @@ grpc_addresses* grpc_addresses_create(size_t num_addresses) { return addresses; } +grpc_addresses* grpc_addresses_copy(grpc_addresses* addresses) { + grpc_addresses* new = grpc_addresses_create(addresses->num_addresses); + memcpy(new->addresses, addresses->addresses, + sizeof(grpc_address) * addresses->num_addresses); + return new; +} + void grpc_addresses_set_address(grpc_addresses* addresses, size_t index, void* address, size_t address_len, bool is_balancer) { @@ -61,37 +69,39 @@ void grpc_addresses_destroy(grpc_addresses* addresses) { struct grpc_resolver_result { gpr_refcount refs; - grpc_lb_policy* lb_policy; + grpc_addresses* addresses; + char* lb_policy_name; }; -grpc_resolver_result* grpc_resolver_result_create() { - grpc_resolver_result* c = gpr_malloc(sizeof(*c)); - memset(c, 0, sizeof(*c)); - gpr_ref_init(&c->refs, 1); - return c; +grpc_resolver_result* grpc_resolver_result_create(grpc_addresses* addresses, + const char* lb_policy_name) { + grpc_resolver_result* result = gpr_malloc(sizeof(*result)); + memset(result, 0, sizeof(*result)); + gpr_ref_init(&result->refs, 1); + result->addresses = addresses; + result->lb_policy_name = gpr_strdup(lb_policy_name); + return result; } -void grpc_resolver_result_ref(grpc_resolver_result* c) { gpr_ref(&c->refs); } +void grpc_resolver_result_ref(grpc_resolver_result* result) { + gpr_ref(&result->refs); +} void grpc_resolver_result_unref(grpc_exec_ctx* exec_ctx, - grpc_resolver_result* c) { - if (gpr_unref(&c->refs)) { - if (c->lb_policy != NULL) { - GRPC_LB_POLICY_UNREF(exec_ctx, c->lb_policy, "resolver_result"); - } - gpr_free(c); + grpc_resolver_result* result) { + if (gpr_unref(&result->refs)) { + grpc_addresses_destroy(result->addresses); + gpr_free(result->lb_policy_name); + gpr_free(result); } } -void grpc_resolver_result_set_lb_policy(grpc_resolver_result* c, - grpc_lb_policy* lb_policy) { - GPR_ASSERT(c->lb_policy == NULL); - if (lb_policy) { - GRPC_LB_POLICY_REF(lb_policy, "resolver_result"); - } - c->lb_policy = lb_policy; +grpc_addresses* grpc_resolver_result_get_addresses( + grpc_resolver_result* result) { + return result->addresses; } -grpc_lb_policy* grpc_resolver_result_get_lb_policy(grpc_resolver_result* c) { - return c->lb_policy; +const char* grpc_resolver_result_get_lb_policy_name( + grpc_resolver_result* result) { + return result->lb_policy_name; } |