move heavy ops out and fix once

This commit is contained in:
xtaci
2019-05-13 21:37:45 +08:00
parent 2c8add414c
commit 4175cf4235
+6 -7
View File
@@ -168,19 +168,18 @@ func (s *Session) AcceptStream() (*Stream, error) {
// Close is used to close the session and all streams.
func (s *Session) Close() error {
var once bool
var err error
s.dieOnce.Do(func() {
err = s.conn.Close()
close(s.die)
once = true
})
if once {
s.streamLock.Lock()
for k := range s.streams {
s.streams[k].sessionClose()
}
s.streamLock.Unlock()
close(s.die)
})
if once {
return err
return s.conn.Close()
} else {
return errors.WithStack(io.ErrClosedPipe)
}