diff options
author | yang-g <yangg@google.com> | 2018-12-20 15:37:30 -0800 |
---|---|---|
committer | yang-g <yangg@google.com> | 2018-12-20 15:37:30 -0800 |
commit | d6dd6f25f4e900d6099098d5d1f0bd52f0581750 (patch) | |
tree | dd8ad1fd6d06546d53486e3acde3d466245df8bb | |
parent | db9be19f5d6a1c97dd1dba87c79315f5ed6af69b (diff) |
Correctly reference the internal string for socket mutator arg
-rw-r--r-- | src/cpp/common/channel_arguments.cc | 2 | ||||
-rw-r--r-- | test/cpp/common/channel_arguments_test.cc | 3 |
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 |