From 68478ed3f14009496c8fa8ab378631bf52947011 Mon Sep 17 00:00:00 2001 From: Lucas Clemente Date: Fri, 3 Jun 2016 21:01:02 +0200 Subject: [PATCH] fix a race condition with stream creation fixes #164, ref #163 --- session.go | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/session.go b/session.go index be99bf83b..001e083d8 100644 --- a/session.go +++ b/session.go @@ -287,23 +287,26 @@ func (s *Session) handlePacket(remoteAddr interface{}, hdr *publicHeader, data [ } func (s *Session) handleStreamFrame(frame *frames.StreamFrame) error { - s.streamsMutex.RLock() + s.streamsMutex.Lock() + defer s.streamsMutex.Unlock() str, streamExists := s.streams[frame.StreamID] - s.streamsMutex.RUnlock() + var err error if !streamExists { if !s.isValidStreamID(frame.StreamID) { return qerr.InvalidStreamID } - ss, _ := s.OpenStream(frame.StreamID) - str = ss.(*stream) + str, err = s.newStreamImpl(frame.StreamID) + if err != nil { + return err + } } if str == nil { // Stream is closed, ignore return nil } - err := str.AddStreamFrame(frame) + err = str.AddStreamFrame(frame) if err != nil { return err }