From 93a6cf0c31f7b20426dfbfc3dac873cb52dff596 Mon Sep 17 00:00:00 2001 From: chessman Date: Thu, 27 Jun 2019 18:15:30 +0300 Subject: [PATCH] add iscsi target driver closer --- pkg/port/iscsit/iscsid.go | 23 ++++++++++++++++++++++- pkg/scsi/drivers.go | 1 + 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/pkg/port/iscsit/iscsid.go b/pkg/port/iscsit/iscsid.go index d4d0c50..6dc518f 100644 --- a/pkg/port/iscsit/iscsid.go +++ b/pkg/port/iscsit/iscsid.go @@ -42,6 +42,9 @@ type ISCSITargetDriver struct { iSCSITargets map[string]*ISCSITarget TSIHPool map[uint16]bool TSIHPoolMutex sync.Mutex + + mu sync.Mutex + l net.Listener } func init() { @@ -160,11 +163,20 @@ func (s *ISCSITargetDriver) Run() error { log.Error(err) os.Exit(1) } + s.mu.Lock() + s.l = l + s.mu.Unlock() for { log.Info("Listening ...") conn, err := l.Accept() if err != nil { + if err, ok := err.(net.Error); ok { + if !err.Temporary() { + log.Info("Closing ...") + break + } + } log.Error(err) continue } @@ -181,7 +193,16 @@ func (s *ISCSITargetDriver) Run() error { // start a new thread to do with this command go s.handler(DATAIN, iscsiConn) } - l.Close() + return nil +} + +func (s *ISCSITargetDriver) Close() error { + s.mu.Lock() + l := s.l + s.mu.Unlock() + if l != nil { + return l.Close() + } return nil } diff --git a/pkg/scsi/drivers.go b/pkg/scsi/drivers.go index 044f8e1..0571f91 100644 --- a/pkg/scsi/drivers.go +++ b/pkg/scsi/drivers.go @@ -27,6 +27,7 @@ type SCSITargetDriver interface { Run() error NewTarget(string, *config.Config) error RereadTargetLUNMap() + Close() error } type TargetDriverFunc func(*SCSITargetService) (SCSITargetDriver, error)