make sure streamLock is non-blocking due to receiveBytes

This commit is contained in:
xtaci
2019-04-17 21:29:58 +08:00
parent 8a71918d00
commit 20e41dd6bd
+9 -11
View File
@@ -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()