don't send data that was queue before the stream write deadline expired

This commit is contained in:
Marten Seemann
2017-12-18 22:24:22 +07:00
parent 76d3ec3ae4
commit ea77974027
2 changed files with 26 additions and 1 deletions

View File

@@ -92,10 +92,13 @@ func (s *sendStream) Write(p []byte) (int, error) {
copy(s.dataForWriting, p)
s.onData()
var bytesWritten int
var err error
for {
bytesWritten = len(p) - len(s.dataForWriting)
deadline := s.writeDeadline
if !deadline.IsZero() && !time.Now().Before(deadline) {
s.dataForWriting = nil
err = errDeadline
break
}
@@ -120,7 +123,7 @@ func (s *sendStream) Write(p []byte) (int, error) {
} else if s.cancelWriteErr != nil {
err = s.cancelWriteErr
}
return len(p) - len(s.dataForWriting), err
return bytesWritten, err
}
// popStreamFrame returns the next STREAM frame that is supposed to be sent on this stream