Skip to content

Commit edbd0e0

Browse files
committed
webrtc: fail Write early if deadline has exceeded before the call (#2578)
1 parent cd9e7cb commit edbd0e0

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

p2p/transport/webrtc/stream_write.go

+4
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ func (s *stream) Write(b []byte) (int, error) {
3535
s.readLoopOnce.Do(s.spawnControlMessageReader)
3636
}
3737

38+
if !s.writeDeadline.IsZero() && time.Now().After(s.writeDeadline) {
39+
return 0, os.ErrDeadlineExceeded
40+
}
41+
3842
var writeDeadlineTimer *time.Timer
3943
defer func() {
4044
if writeDeadlineTimer != nil {

p2p/transport/webrtc/transport_test.go

+7-1
Original file line numberDiff line numberDiff line change
@@ -402,10 +402,16 @@ func TestTransportWebRTC_Deadline(t *testing.T) {
402402
stream, err := conn.OpenStream(context.Background())
403403
require.NoError(t, err)
404404

405-
stream.SetWriteDeadline(time.Now().Add(200 * time.Millisecond))
405+
stream.SetWriteDeadline(time.Now().Add(100 * time.Millisecond))
406406
largeBuffer := make([]byte, 2*1024*1024)
407407
_, err = stream.Write(largeBuffer)
408408
require.ErrorIs(t, err, os.ErrDeadlineExceeded)
409+
410+
stream.SetWriteDeadline(time.Now().Add(-200 * time.Millisecond))
411+
smallBuffer := make([]byte, 1024)
412+
_, err = stream.Write(smallBuffer)
413+
require.ErrorIs(t, err, os.ErrDeadlineExceeded)
414+
409415
})
410416
}
411417

0 commit comments

Comments
 (0)