aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Yang Gao <yangg@google.com>2018-12-21 10:23:31 -0800
committerGravatar GitHub <noreply@github.com>2018-12-21 10:23:31 -0800
commit806c1e0b7abcde983827db1ef1dd6a3785f0a5c8 (patch)
tree60e211837340fa013dc1bba8ef3be9d5c9bb364a
parentbae61a0f43db262d6170c53c0b77db04b0113ad1 (diff)
parentd6dd6f25f4e900d6099098d5d1f0bd52f0581750 (diff)
Merge pull request #17573 from yang-g/socket_mutator
Correctly reference the internal string for socket mutator arg
-rw-r--r--src/cpp/common/channel_arguments.cc2
-rw-r--r--test/cpp/common/channel_arguments_test.cc3
2 files changed, 5 insertions, 0 deletions
diff --git a/src/cpp/common/channel_arguments.cc b/src/cpp/common/channel_arguments.cc
index 50ee9d871f..214d72f853 100644
--- a/src/cpp/common/channel_arguments.cc
+++ b/src/cpp/common/channel_arguments.cc
@@ -106,7 +106,9 @@ void ChannelArguments::SetSocketMutator(grpc_socket_mutator* mutator) {
}
if (!replaced) {
+ strings_.push_back(grpc::string(mutator_arg.key));
args_.push_back(mutator_arg);
+ args_.back().key = const_cast<char*>(strings_.back().c_str());
}
}
diff --git a/test/cpp/common/channel_arguments_test.cc b/test/cpp/common/channel_arguments_test.cc
index 183d2afa78..12fd9784f4 100644
--- a/test/cpp/common/channel_arguments_test.cc
+++ b/test/cpp/common/channel_arguments_test.cc
@@ -209,6 +209,9 @@ TEST_F(ChannelArgumentsTest, SetSocketMutator) {
channel_args_.SetSocketMutator(mutator0);
EXPECT_TRUE(HasArg(arg0));
+ // Exercise the copy constructor because we ran some sanity checks in it.
+ grpc::ChannelArguments new_args{channel_args_};
+
channel_args_.SetSocketMutator(mutator1);
EXPECT_TRUE(HasArg(arg1));
// arg0 is replaced by arg1