diff --git a/src/core/ext/client_config/subchannel.h b/src/core/ext/client_config/subchannel.h index 40d90be1247..a24dbe80fb4 100644 --- a/src/core/ext/client_config/subchannel.h +++ b/src/core/ext/client_config/subchannel.h @@ -163,7 +163,7 @@ struct grpc_subchannel_args { /** Channel arguments to be supplied to the newly created channel */ const grpc_channel_args *args; /** Server name */ - char *server_name; // Does not own. + char *server_name; /** Address to connect to */ struct sockaddr *addr; size_t addr_len; diff --git a/src/core/ext/client_config/subchannel_index.c b/src/core/ext/client_config/subchannel_index.c index 891c066f2ca..40ce91492d3 100644 --- a/src/core/ext/client_config/subchannel_index.c +++ b/src/core/ext/client_config/subchannel_index.c @@ -38,6 +38,7 @@ #include #include +#include #include #include "src/core/lib/channel/channel_args.h" @@ -85,7 +86,7 @@ static grpc_subchannel_key *create_key( } else { k->args.filters = NULL; } - k->args.server_name = args->server_name; + k->args.server_name = gpr_strdup(args->server_name); k->args.addr_len = args->addr_len; k->args.addr = gpr_malloc(args->addr_len); if (k->args.addr_len > 0) { @@ -131,6 +132,7 @@ void grpc_subchannel_key_destroy(grpc_exec_ctx *exec_ctx, grpc_connector_unref(exec_ctx, k->connector); gpr_free((grpc_channel_args *)k->args.filters); grpc_channel_args_destroy((grpc_channel_args *)k->args.args); + gpr_free(k->args.server_name); gpr_free(k->args.addr); gpr_free(k); }