diff --git a/acceptor.go b/acceptor.go index 968be9efb..da4cd9bb0 100644 --- a/acceptor.go +++ b/acceptor.go @@ -144,6 +144,13 @@ func (a *Acceptor) Stop() { session.stop() } a.sessionGroup.Wait() + + for sessionID := range a.sessions { + err := UnregisterSession(sessionID) + if err != nil { + return + } + } } // RemoteAddr gets remote IP address for a given session. diff --git a/initiator.go b/initiator.go index 1b48ce4ce..eeff30fc0 100644 --- a/initiator.go +++ b/initiator.go @@ -73,7 +73,15 @@ func (i *Initiator) Stop() { default: } close(i.stopChan) + i.wg.Wait() + + for sessionID := range i.sessionSettings { + err := UnregisterSession(sessionID) + if err != nil { + return + } + } } // NewInitiator creates and initializes a new Initiator. diff --git a/session_factory_test.go b/session_factory_test.go index d14c5b221..349e7580c 100644 --- a/session_factory_test.go +++ b/session_factory_test.go @@ -472,6 +472,23 @@ func (s *SessionFactorySuite) TestNewSessionBuildInitiators() { s.Equal("127.0.0.1:5000", session.SocketConnectAddress[0]) } +func (s *SessionFactorySuite) TestDuplicateSession() { + s.sessionFactory.BuildInitiators = true + s.SessionSettings.Set(config.HeartBtInt, "34") + s.SessionSettings.Set(config.SocketConnectHost, "127.0.0.1") + s.SessionSettings.Set(config.SocketConnectPort, "5000") + + session, err := s.createSession(s.SessionID, s.MessageStoreFactory, s.SessionSettings, s.LogFactory, s.App) + s.Nil(err) + s.True(session.InitiateLogon) + _, err = s.createSession(s.SessionID, s.MessageStoreFactory, s.SessionSettings, s.LogFactory, s.App) + s.NotNil(err) + s.Equal("Duplicate SessionID", err.Error()) + UnregisterSession(s.SessionID) + _, err = s.createSession(s.SessionID, s.MessageStoreFactory, s.SessionSettings, s.LogFactory, s.App) + s.Nil(err) +} + func (s *SessionFactorySuite) TestNewSessionBuildAcceptors() { s.sessionFactory.BuildInitiators = false s.SessionSettings.Set(config.HeartBtInt, "34")