Browse Source

detect underlying mux worker closed

Darien Raymond 7 years ago
parent
commit
5ffff14bbf
3 changed files with 12 additions and 1 deletions
  1. 1 1
      app/reverse/bridge.go
  2. 4 0
      common/mux/server.go
  3. 7 0
      common/mux/session.go

+ 1 - 1
app/reverse/bridge.go

@@ -137,7 +137,7 @@ func (w *BridgeWorker) Close() error {
 }
 
 func (w *BridgeWorker) IsActive() bool {
-	return w.state == Control_ACTIVE
+	return w.state == Control_ACTIVE && !w.worker.Closed()
 }
 
 func (w *BridgeWorker) Connections() uint32 {

+ 4 - 0
common/mux/server.go

@@ -96,6 +96,10 @@ func (w *ServerWorker) ActiveConnections() uint32 {
 	return uint32(w.sessionManager.Size())
 }
 
+func (w *ServerWorker) Closed() bool {
+	return w.sessionManager.Closed()
+}
+
 func (w *ServerWorker) handleStatusKeepAlive(meta *FrameMetadata, reader *buf.BufferedReader) error {
 	if meta.Option.Has(OptionData) {
 		return buf.Copy(NewStreamReader(reader), buf.Discard)

+ 7 - 0
common/mux/session.go

@@ -22,6 +22,13 @@ func NewSessionManager() *SessionManager {
 	}
 }
 
+func (m *SessionManager) Closed() bool {
+	m.RLock()
+	defer m.RUnlock()
+
+	return m.closed
+}
+
 func (m *SessionManager) Size() int {
 	m.RLock()
 	defer m.RUnlock()