TUN-6385: Don't share err between acceptStream loop and per-stream goroutines

This commit is contained in:
Igor Postelnik 2022-06-13 12:45:40 -05:00
parent 69b28e358c
commit e8407848ec
1 changed files with 13 additions and 11 deletions

View File

@ -122,6 +122,11 @@ func (q *QUICConnection) serveControlStream(ctx context.Context, controlStream q
return nil return nil
} }
// Close closes the session with no errors specified.
func (q *QUICConnection) Close() {
q.session.CloseWithError(0, "")
}
func (q *QUICConnection) acceptStream(ctx context.Context) error { func (q *QUICConnection) acceptStream(ctx context.Context) error {
defer q.Close() defer q.Close()
for { for {
@ -133,20 +138,17 @@ func (q *QUICConnection) acceptStream(ctx context.Context) error {
} }
return fmt.Errorf("failed to accept QUIC stream: %w", err) return fmt.Errorf("failed to accept QUIC stream: %w", err)
} }
go func() { go q.runStream(quicStream)
}
}
func (q *QUICConnection) runStream(quicStream quic.Stream) {
stream := quicpogs.NewSafeStreamCloser(quicStream) stream := quicpogs.NewSafeStreamCloser(quicStream)
defer stream.Close() defer stream.Close()
if err = q.handleStream(stream); err != nil { if err := q.handleStream(stream); err != nil {
q.logger.Err(err).Msg("Failed to handle QUIC stream") q.logger.Err(err).Msg("Failed to handle QUIC stream")
} }
}()
}
}
// Close closes the session with no errors specified.
func (q *QUICConnection) Close() {
q.session.CloseWithError(0, "")
} }
func (q *QUICConnection) handleStream(stream io.ReadWriteCloser) error { func (q *QUICConnection) handleStream(stream io.ReadWriteCloser) error {