Skip to content

Commit 5d5a036

Browse files
committed
quic: handle streams moving from the data queue to the meta queue
In Conn.appendStreamFrames, a stream can be moved from the data queue (for streams with only flow-controlled frames to send) to the metadata queue (for streams with non-flow-controlled frames to send) if some other goroutine asynchronously modifies the stream state. Adjust the check at the end of this function to clear the needSend bool only if queueMeta and queueData are both empty, to avoid losing track of the need to send frames when this happens. For golang/go#58547 Change-Id: Ib9ad3b01f543cd7673f5233ceb58b2db9adfff5a Reviewed-on: https://go-review.googlesource.com/c/net/+/531656 LUCI-TryBot-Result: Go LUCI <[email protected]> Reviewed-by: Jonathan Amsterdam <[email protected]>
1 parent 350aad2 commit 5d5a036

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

internal/quic/conn_streams.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -372,7 +372,9 @@ func (c *Conn) appendStreamFrames(w *packetWriter, pnum packetNumber, pto bool)
372372
state = s.state.set(0, streamQueueData)
373373
c.queueStreamForSendLocked(s, state)
374374
}
375-
c.streams.needSend.Store(c.streams.queueData.head != nil)
375+
if c.streams.queueMeta.head == nil && c.streams.queueData.head == nil {
376+
c.streams.needSend.Store(false)
377+
}
376378
return true
377379
}
378380

0 commit comments

Comments
 (0)