Merge branch 'master' of https://github.com/grpc/grpc-go into race-fix

This commit is contained in:
iamqizhao
2016-07-29 13:43:07 -07:00
3 changed files with 16 additions and 1 deletions

View File

@ -239,6 +239,10 @@ func (t *http2Server) HandleStreams(handle func(*Stream)) {
} }
frame, err := t.framer.readFrame() frame, err := t.framer.readFrame()
if err == io.EOF || err == io.ErrUnexpectedEOF {
t.Close()
return
}
if err != nil { if err != nil {
grpclog.Printf("transport: http2Server.HandleStreams failed to read frame: %v", err) grpclog.Printf("transport: http2Server.HandleStreams failed to read frame: %v", err)
t.Close() t.Close()
@ -265,6 +269,10 @@ func (t *http2Server) HandleStreams(handle func(*Stream)) {
t.controlBuf.put(&resetStream{se.StreamID, se.Code}) t.controlBuf.put(&resetStream{se.StreamID, se.Code})
continue continue
} }
if err == io.EOF || err == io.ErrUnexpectedEOF {
t.Close()
return
}
grpclog.Printf("transport: http2Server.HandleStreams failed to read frame: %v", err) grpclog.Printf("transport: http2Server.HandleStreams failed to read frame: %v", err)
t.Close() t.Close()
return return

View File

@ -559,6 +559,12 @@ func wait(ctx context.Context, done, goAway, closing <-chan struct{}, proceed <-
case <-closing: case <-closing:
return 0, ErrConnClosing return 0, ErrConnClosing
case i := <-proceed: case i := <-proceed:
// User cancellation has precedence.
select {
case <-ctx.Done():
return 0, ContextErr(ctx.Err())
default:
}
return i, nil return i, nil
} }
} }

View File

@ -553,6 +553,7 @@ func TestServerContextCanceledOnClosedConnection(t *testing.T) {
case <-time.After(5 * time.Second): case <-time.After(5 * time.Second):
t.Fatalf("Failed to cancel the context of the sever side stream.") t.Fatalf("Failed to cancel the context of the sever side stream.")
} }
server.stop()
} }
func TestServerWithMisbehavedClient(t *testing.T) { func TestServerWithMisbehavedClient(t *testing.T) {
@ -733,7 +734,7 @@ func TestEncodingRequiredStatus(t *testing.T) {
Last: true, Last: true,
Delay: false, Delay: false,
} }
if err := ct.Write(s, expectedRequest, &opts); err != nil { if err := ct.Write(s, expectedRequest, &opts); err != nil || err == io.EOF {
t.Fatalf("Failed to write the request: %v", err) t.Fatalf("Failed to write the request: %v", err)
} }
p := make([]byte, http2MaxFrameLen) p := make([]byte, http2MaxFrameLen)