@@ -105,9 +105,12 @@ func (sess *SessionsManager) DelSession(id string) {
105
105
myconn := * sess .Session [id ].Conn
106
106
myconn .Close ()
107
107
}
108
- if sess .Session [id ].WorkConn != nil {
108
+ sess .Session [id ].WorkConnMutex .Lock ()
109
+ if sess .Session [id ].WorkConnIsOpen && sess .Session [id ].WorkConn != nil {
110
+ sess .Session [id ].WorkConnIsOpen = false
109
111
close (sess .Session [id ].WorkConn )
110
112
}
113
+ sess .Session [id ].WorkConnMutex .Unlock ()
111
114
}
112
115
delete (sess .Session , id )
113
116
}
@@ -159,6 +162,7 @@ func (sess *SessionsManager) connHdl(conn net.Conn) {
159
162
DisableMuxer : m .DisableMuxer ,
160
163
Conn : & conn ,
161
164
GatewaySession : nil ,
165
+ WorkConnIsOpen : true ,
162
166
WorkConn : make (chan net.Conn , 5 )}
163
167
//:TODO 新的登录存储之前先清除旧的同id登录
164
168
sess .SetSession (token .RunId , gatewaySession )
@@ -181,6 +185,7 @@ func (sess *SessionsManager) connHdl(conn net.Conn) {
181
185
Version : m .Version ,
182
186
Conn : & conn ,
183
187
GatewaySession : yamuxSession ,
188
+ WorkConnIsOpen : true ,
184
189
WorkConn : make (chan net.Conn , 5 )}
185
190
//:TODO 新的登录存储之前先清除旧的同id登录
186
191
sess .SetSession (token .RunId , gatewaySession )
@@ -217,7 +222,11 @@ func (sess *SessionsManager) connHdl(conn net.Conn) {
217
222
// /Users/iotserv/git/server-go/manager/SessionsManager.go:209 +0x4cc
218
223
//created by github.com/OpenIoTHub/server-go/manager.SessionsManager.listenerHdl in goroutine 12
219
224
// /Users/iotserv/git/server-go/manager/listen.go:131 +0x1e5
220
- session .WorkConn <- conn
225
+ session .WorkConnMutex .Lock ()
226
+ if session .WorkConnIsOpen {
227
+ session .WorkConn <- conn
228
+ }
229
+ session .WorkConnMutex .Unlock ()
221
230
}
222
231
223
232
case * models.OpenIoTHubLogin :
0 commit comments