in nmxact/nmserial/serial_sesn.go [121:171]
func (s *SerialSesn) Close() error {
s.m.Lock()
if !s.isOpen {
s.m.Unlock()
return nmxutil.NewSesnClosedError(
"Attempt to close an unopened serial session")
}
s.isOpen = false
s.txvr.ErrorAll(fmt.Errorf("closed"))
s.txvr.Stop()
close(s.stopChan)
close(s.connChan)
s.sx.Lock()
if s == s.sx.acceptSesn {
s.sx.acceptSesn = nil
}
if s == s.sx.reqSesn {
s.sx.reqSesn = nil
}
s.sx.Unlock()
s.m.Unlock()
s.wg.Wait()
s.stopChan = nil
s.txvr = nil
for {
s, ok := <-s.connChan
if !ok {
break
}
s.Close()
}
close(s.msgChan)
for {
if _, ok := <-s.msgChan; !ok {
break
}
}
close(s.errChan)
for {
if _, ok := <-s.errChan; !ok {
break
}
}
return nil
}