@@ -28,7 +28,7 @@ type Acceptor struct {
2828 dynamicQualifier bool
2929 dynamicQualifierCount int
3030 dynamicSessionChan chan * session
31- sessionAddr map [ SessionID ]net. Addr
31+ sessionAddr sync. Map
3232 sessionHostPort map [SessionID ]int
3333 listeners map [string ]net.Listener
3434 connectionValidator ConnectionValidator
@@ -89,13 +89,12 @@ func (a *Acceptor) Start() (err error) {
8989 }
9090 }
9191
92- for sessionID := range a .sessions {
93- session := a .sessions [sessionID ]
92+ for _ , s := range a .sessions {
9493 a .sessionGroup .Add (1 )
95- go func () {
96- session .run ()
94+ go func (s * session ) {
95+ s .run ()
9796 a .sessionGroup .Done ()
98- }()
97+ }(s )
9998 }
10099 if a .dynamicSessions {
101100 a .dynamicSessionChan = make (chan * session )
@@ -133,8 +132,12 @@ func (a *Acceptor) Stop() {
133132
134133//Get remote IP address for a given session.
135134func (a * Acceptor ) RemoteAddr (sessionID SessionID ) (net.Addr , bool ) {
136- addr , ok := a .sessionAddr [sessionID ]
137- return addr , ok
135+ addr , ok := a .sessionAddr .Load (sessionID )
136+ if ! ok || addr == nil {
137+ return nil , false
138+ }
139+ val , ok := addr .(net.Addr )
140+ return val , ok
138141}
139142
140143//NewAcceptor creates and initializes a new Acceptor.
@@ -145,7 +148,6 @@ func NewAcceptor(app Application, storeFactory MessageStoreFactory, settings *Se
145148 settings : settings ,
146149 logFactory : logFactory ,
147150 sessions : make (map [SessionID ]* session ),
148- sessionAddr : make (map [SessionID ]net.Addr ),
149151 sessionHostPort : make (map [SessionID ]int ),
150152 listeners : make (map [string ]net.Listener ),
151153 }
@@ -320,7 +322,7 @@ func (a *Acceptor) handleConnection(netConn net.Conn) {
320322 defer session .stop ()
321323 }
322324
323- a .sessionAddr [ sessID ] = netConn .RemoteAddr ()
325+ a .sessionAddr . Store ( sessID , netConn .RemoteAddr () )
324326 msgIn := make (chan fixIn )
325327 msgOut := make (chan []byte )
326328
@@ -367,7 +369,7 @@ LOOP:
367369 case id := <- complete :
368370 session , ok := sessions [id ]
369371 if ok {
370- delete ( a .sessionAddr , session .sessionID )
372+ a .sessionAddr . Delete ( session .sessionID )
371373 delete (sessions , id )
372374 } else {
373375 a .globalLog .OnEventf ("Missing dynamic session %v!" , id )
0 commit comments