diff --git a/src/brpc/stream.cpp b/src/brpc/stream.cpp index a2a106a8b1..01504d3df6 100644 --- a/src/brpc/stream.cpp +++ b/src/brpc/stream.cpp @@ -837,7 +837,10 @@ int StreamCreate(StreamId *request_stream, Controller &cntl, return -1; } StreamIds request_streams; - StreamCreate(request_streams, 1, cntl, options); + const int rc = StreamCreate(request_streams, 1, cntl, options); + if (rc != 0) { + return rc; + } *request_stream = request_streams[0]; return 0; } diff --git a/test/brpc_streaming_rpc_unittest.cpp b/test/brpc_streaming_rpc_unittest.cpp index 6a3b7b9e42..fc82fcde4e 100644 --- a/test/brpc_streaming_rpc_unittest.cpp +++ b/test/brpc_streaming_rpc_unittest.cpp @@ -888,3 +888,15 @@ TEST_F(StreamingRpcTest, segment_stream_data_automatically) { ASSERT_EQ(N, handler._expected_next_value); GFLAGS_NAMESPACE::SetCommandLineOption("stream_write_max_segment_size", "536870912"); } + +TEST_F(StreamingRpcTest, create_request_stream_twice_on_same_controller_returns_error) { + brpc::Controller cntl; + + brpc::StreamId first_stream = brpc::INVALID_STREAM_ID; + ASSERT_EQ(0, brpc::StreamCreate(&first_stream, cntl, NULL)); + brpc::ScopedStream stream_guard(first_stream); + + brpc::StreamId second_stream = brpc::INVALID_STREAM_ID; + ASSERT_EQ(-1, brpc::StreamCreate(&second_stream, cntl, NULL)); + ASSERT_EQ(brpc::INVALID_STREAM_ID, second_stream); +}