add iscsi target driver closer
This commit is contained in:
@@ -42,6 +42,9 @@ type ISCSITargetDriver struct {
|
|||||||
iSCSITargets map[string]*ISCSITarget
|
iSCSITargets map[string]*ISCSITarget
|
||||||
TSIHPool map[uint16]bool
|
TSIHPool map[uint16]bool
|
||||||
TSIHPoolMutex sync.Mutex
|
TSIHPoolMutex sync.Mutex
|
||||||
|
|
||||||
|
mu sync.Mutex
|
||||||
|
l net.Listener
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@@ -160,11 +163,20 @@ func (s *ISCSITargetDriver) Run() error {
|
|||||||
log.Error(err)
|
log.Error(err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
s.mu.Lock()
|
||||||
|
s.l = l
|
||||||
|
s.mu.Unlock()
|
||||||
|
|
||||||
for {
|
for {
|
||||||
log.Info("Listening ...")
|
log.Info("Listening ...")
|
||||||
conn, err := l.Accept()
|
conn, err := l.Accept()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if err, ok := err.(net.Error); ok {
|
||||||
|
if !err.Temporary() {
|
||||||
|
log.Info("Closing ...")
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
log.Error(err)
|
log.Error(err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@@ -181,7 +193,16 @@ func (s *ISCSITargetDriver) Run() error {
|
|||||||
// start a new thread to do with this command
|
// start a new thread to do with this command
|
||||||
go s.handler(DATAIN, iscsiConn)
|
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
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ type SCSITargetDriver interface {
|
|||||||
Run() error
|
Run() error
|
||||||
NewTarget(string, *config.Config) error
|
NewTarget(string, *config.Config) error
|
||||||
RereadTargetLUNMap()
|
RereadTargetLUNMap()
|
||||||
|
Close() error
|
||||||
}
|
}
|
||||||
|
|
||||||
type TargetDriverFunc func(*SCSITargetService) (SCSITargetDriver, error)
|
type TargetDriverFunc func(*SCSITargetService) (SCSITargetDriver, error)
|
||||||
|
|||||||
Reference in New Issue
Block a user