diff --git a/session.go b/session.go index 8dd847c..c1160d0 100644 --- a/session.go +++ b/session.go @@ -248,20 +248,18 @@ func (s *Session) recvLoop() { } s.streamLock.Unlock() case cmdPSH: - var written int64 - var err error s.streamLock.Lock() - if stream, ok := s.streams[sid]; ok { - written, err = stream.receiveBytes(s.conn, int64(hdr.Length())) - atomic.AddInt32(&s.bucket, -int32(written)) - stream.notifyReadEvent() - } + stream := s.streams[sid] s.streamLock.Unlock() - // read data error - if err != nil { - s.Close() - return + if stream != nil { + written, err := stream.receiveBytes(s.conn, int64(hdr.Length())) + atomic.AddInt32(&s.bucket, -int32(written)) + stream.notifyReadEvent() + if err != nil { + s.Close() + return + } } default: s.Close()