Skip to content

Commit

Permalink
ensure CloseSend is called, exit on errors
Browse files Browse the repository at this point in the history
  • Loading branch information
tmc committed Jun 7, 2016
1 parent a5064d5 commit 1725708
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 30 deletions.
20 changes: 10 additions & 10 deletions examples/examplepb/a_bit_of_everything.pb.gw.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 10 additions & 10 deletions examples/examplepb/flow_combination.pb.gw.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 10 additions & 10 deletions protoc-gen-grpc-gateway/gengateway/template.go
Original file line number Diff line number Diff line change
Expand Up @@ -245,8 +245,13 @@ var (
return nil, metadata, err
}
dec := marshaler.NewDecoder(req.Body)
sendErrs := make(chan error, 1)
firstSend:= make(chan error, 1)
go func(errs chan<- error) {
defer func(){
if err := stream.CloseSend(); err != nil {
grpclog.Printf("Failed to terminate client stream: %v", err)
}
}()
for {
var protoReq {{.Method.RequestType.GoType .Method.Service.File.GoPkg.Path}}
err = dec.Decode(&protoReq)
Expand All @@ -269,30 +274,25 @@ var (
case errs <- grpc.Errorf(codes.InvalidArgument, "%v", err):
default:
}
return
}
if err = stream.Send(&protoReq); err != nil {
grpclog.Printf("Failed to send request: %v", err)
select {
case errs <- err:
default:
}
return
}
}
if err := stream.CloseSend(); err != nil {
grpclog.Printf("Failed to terminate client stream: %v", err)
select {
case errs <- err:
default:
}
}
}(sendErrs)
}(firstSend)
header, err := stream.Header()
if err != nil {
grpclog.Printf("Failed to get header from client: %v", err)
return nil, metadata, err
}
metadata.HeaderMD = header
return stream, metadata, <-sendErrs
return stream, metadata, <-firstSend
}
`))

Expand Down

0 comments on commit 1725708

Please sign in to comment.