forked from quic-go/quic-go
Merge pull request #2188 from lucas-clemente/context-stream-cancelation
cancel the stream context as early as possible
This commit is contained in:
@@ -315,11 +315,11 @@ func (s *sendStream) Close() error {
|
|||||||
s.mutex.Unlock()
|
s.mutex.Unlock()
|
||||||
return fmt.Errorf("Close called for canceled stream %d", s.streamID)
|
return fmt.Errorf("Close called for canceled stream %d", s.streamID)
|
||||||
}
|
}
|
||||||
|
s.ctxCancel()
|
||||||
s.finishedWriting = true
|
s.finishedWriting = true
|
||||||
s.mutex.Unlock()
|
s.mutex.Unlock()
|
||||||
|
|
||||||
s.sender.onHasStreamData(s.streamID) // need to send the FIN, must be called without holding the mutex
|
s.sender.onHasStreamData(s.streamID) // need to send the FIN, must be called without holding the mutex
|
||||||
s.ctxCancel()
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -335,6 +335,7 @@ func (s *sendStream) cancelWriteImpl(errorCode protocol.ApplicationErrorCode, wr
|
|||||||
s.mutex.Unlock()
|
s.mutex.Unlock()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
s.ctxCancel()
|
||||||
s.canceledWrite = true
|
s.canceledWrite = true
|
||||||
s.cancelWriteErr = writeErr
|
s.cancelWriteErr = writeErr
|
||||||
newlyCompleted := s.isNewlyCompleted()
|
newlyCompleted := s.isNewlyCompleted()
|
||||||
@@ -349,7 +350,6 @@ func (s *sendStream) cancelWriteImpl(errorCode protocol.ApplicationErrorCode, wr
|
|||||||
if newlyCompleted {
|
if newlyCompleted {
|
||||||
s.sender.onStreamCompleted(s.streamID)
|
s.sender.onStreamCompleted(s.streamID)
|
||||||
}
|
}
|
||||||
s.ctxCancel()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *sendStream) handleMaxStreamDataFrame(frame *wire.MaxStreamDataFrame) {
|
func (s *sendStream) handleMaxStreamDataFrame(frame *wire.MaxStreamDataFrame) {
|
||||||
@@ -388,11 +388,11 @@ func (s *sendStream) SetWriteDeadline(t time.Time) error {
|
|||||||
// The peer will NOT be informed about this: the stream is closed without sending a FIN or RST.
|
// The peer will NOT be informed about this: the stream is closed without sending a FIN or RST.
|
||||||
func (s *sendStream) closeForShutdown(err error) {
|
func (s *sendStream) closeForShutdown(err error) {
|
||||||
s.mutex.Lock()
|
s.mutex.Lock()
|
||||||
|
s.ctxCancel()
|
||||||
s.closedForShutdown = true
|
s.closedForShutdown = true
|
||||||
s.closeForShutdownErr = err
|
s.closeForShutdownErr = err
|
||||||
s.mutex.Unlock()
|
s.mutex.Unlock()
|
||||||
s.signalWrite()
|
s.signalWrite()
|
||||||
s.ctxCancel()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// signalWrite performs a non-blocking send on the writeChan
|
// signalWrite performs a non-blocking send on the writeChan
|
||||||
|
|||||||
Reference in New Issue
Block a user