fix a race condition with stream creation

fixes #164, ref #163
This commit is contained in:
Lucas Clemente
2016-06-03 21:01:02 +02:00
parent ffacf2f328
commit 68478ed3f1

View File

@@ -287,23 +287,26 @@ func (s *Session) handlePacket(remoteAddr interface{}, hdr *publicHeader, data [
} }
func (s *Session) handleStreamFrame(frame *frames.StreamFrame) error { func (s *Session) handleStreamFrame(frame *frames.StreamFrame) error {
s.streamsMutex.RLock() s.streamsMutex.Lock()
defer s.streamsMutex.Unlock()
str, streamExists := s.streams[frame.StreamID] str, streamExists := s.streams[frame.StreamID]
s.streamsMutex.RUnlock()
var err error
if !streamExists { if !streamExists {
if !s.isValidStreamID(frame.StreamID) { if !s.isValidStreamID(frame.StreamID) {
return qerr.InvalidStreamID return qerr.InvalidStreamID
} }
ss, _ := s.OpenStream(frame.StreamID) str, err = s.newStreamImpl(frame.StreamID)
str = ss.(*stream) if err != nil {
return err
}
} }
if str == nil { if str == nil {
// Stream is closed, ignore // Stream is closed, ignore
return nil return nil
} }
err := str.AddStreamFrame(frame) err = str.AddStreamFrame(frame)
if err != nil { if err != nil {
return err return err
} }