1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2025-01-02 23:47:07 -05:00

force close session manage when main connection is finished

This commit is contained in:
Darien Raymond 2017-04-13 20:56:32 +02:00
parent 81d840699a
commit 2cf809021b
No known key found for this signature in database
GPG Key ID: 7251FFA14BB18169
2 changed files with 19 additions and 2 deletions

View File

@ -121,6 +121,7 @@ func (m *Client) monitor() {
for {
select {
case <-m.ctx.Done():
m.sessionManager.Close()
m.inboundRay.InboundInput().Close()
m.inboundRay.InboundOutput().CloseError()
return
@ -302,6 +303,8 @@ func handle(ctx context.Context, s *Session, output buf.Writer) {
func (w *ServerWorker) run(ctx context.Context) {
input := w.outboundRay.OutboundInput()
reader := NewReader(input)
defer w.sessionManager.Close()
L:
for {
select {

View File

@ -74,10 +74,26 @@ func (m *SessionManager) CloseIfNoSession() bool {
m.RLock()
defer m.RUnlock()
if m.closed {
return true
}
if len(m.sessions) == 0 {
return false
}
m.closed = true
return true
}
func (m *SessionManager) Close() {
m.RLock()
defer m.RUnlock()
if m.closed {
return
}
m.closed = true
for _, s := range m.sessions {
@ -86,8 +102,6 @@ func (m *SessionManager) CloseIfNoSession() bool {
}
m.sessions = make(map[uint16]*Session)
return true
}
type Session struct {