diff --git a/stream.go b/stream.go index 70c6447a7..d5b82a4b9 100644 --- a/stream.go +++ b/stream.go @@ -190,9 +190,7 @@ func NewClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, meth case <-t.Error(): // Incur transport error, simply exit. case <-s.Done(): - err := Errorf(s.StatusCode(), s.StatusDesc()) - cs.finish(err) - cs.closeTransportStream(err) + // Simply exit. Leave the next I/O op to do cleanup. case <-s.Context().Done(): err := s.Context().Err() cs.finish(err) diff --git a/test/end2end_test.go b/test/end2end_test.go index c109c8858..fb9d91ed1 100644 --- a/test/end2end_test.go +++ b/test/end2end_test.go @@ -1536,7 +1536,7 @@ func testClientStreamingError(t *testing.T, e env) { t.Fatalf("%v.Send(%v) = %v, want ", stream, req, err) } for { - if err := stream.Send(req); err == nil { + if err := stream.Send(req); err != io.EOF { continue } if _, err := stream.CloseAndRecv(); grpc.Code(err) != codes.NotFound {