add a context to Session.Accept{Uni}Stream

This commit is contained in:
Marten Seemann
2019-05-28 17:32:18 +01:00
parent f74082b2fb
commit 5550ba2c3b
28 changed files with 140 additions and 105 deletions

View File

@@ -1,6 +1,7 @@
package quic
import (
"context"
"sync"
"github.com/lucas-clemente/quic-go/internal/protocol"
@@ -48,24 +49,28 @@ func newIncomingItemsMap(
}
}
func (m *incomingItemsMap) AcceptStream() (item, error) {
func (m *incomingItemsMap) AcceptStream(ctx context.Context) (item, error) {
m.mutex.Lock()
defer m.mutex.Unlock()
var num protocol.StreamNum
var str item
for {
num = m.nextStreamToAccept
var ok bool
if m.closeErr != nil {
m.mutex.Unlock()
return nil, m.closeErr
}
var ok bool
str, ok = m.streams[num]
if ok {
break
}
m.mutex.Unlock()
<-m.newStreamChan
select {
case <-ctx.Done():
return nil, ctx.Err()
case <-m.newStreamChan:
}
m.mutex.Lock()
}
m.nextStreamToAccept++
@@ -73,9 +78,11 @@ func (m *incomingItemsMap) AcceptStream() (item, error) {
if _, ok := m.streamsToDelete[num]; ok {
delete(m.streamsToDelete, num)
if err := m.deleteStream(num); err != nil {
m.mutex.Unlock()
return nil, err
}
}
m.mutex.Unlock()
return str, nil
}