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() s.streamLock.Unlock()
case cmdPSH: case cmdPSH:
var written int64
var err error
s.streamLock.Lock() s.streamLock.Lock()
if stream, ok := s.streams[sid]; ok { stream := s.streams[sid]
written, err = stream.receiveBytes(s.conn, int64(hdr.Length()))
atomic.AddInt32(&s.bucket, -int32(written))
stream.notifyReadEvent()
}
s.streamLock.Unlock() s.streamLock.Unlock()
// read data error if stream != nil {
if err != nil { written, err := stream.receiveBytes(s.conn, int64(hdr.Length()))
s.Close() atomic.AddInt32(&s.bucket, -int32(written))
return stream.notifyReadEvent()
if err != nil {
s.Close()
return
}
} }
default: default:
s.Close() s.Close()