From 9ca0e8f57f15b9bed88959ccb0f74e8ddd9e6614 Mon Sep 17 00:00:00 2001 From: zarazaex69 Date: Thu, 7 May 2026 00:42:36 +0300 Subject: [PATCH] fix: srv dont leave bug --- internal/provider/wbstream/peer.go | 15 +++++++++++++++ internal/server/server.go | 24 +++++++++++++++--------- 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/internal/provider/wbstream/peer.go b/internal/provider/wbstream/peer.go index 452ed83..c0353c4 100644 --- a/internal/provider/wbstream/peer.go +++ b/internal/provider/wbstream/peer.go @@ -190,6 +190,7 @@ func (p *Peer) Close() error { p.cancel() close(p.done) if p.room != nil { + p.unpublishLocalTracks() p.room.Disconnect() } close(p.sendQueue) @@ -198,6 +199,20 @@ func (p *Peer) Close() error { return nil } +func (p *Peer) unpublishLocalTracks() { + if p.room == nil || p.room.LocalParticipant == nil { + return + } + for _, publication := range p.room.LocalParticipant.TrackPublications() { + if publication.SID() == "" { + continue + } + if err := p.room.LocalParticipant.UnpublishTrack(publication.SID()); err != nil { + log.Printf("WB Stream unpublish track error: %v", err) + } + } +} + // SetReconnectCallback is a stub for WB Stream. func (p *Peer) SetReconnectCallback(cb func(*webrtc.DataChannel)) { p.onReconnect = cb diff --git a/internal/server/server.go b/internal/server/server.go index f4bffb0..2acd57a 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -109,7 +109,7 @@ func Run( go func() { <-runCtx.Done() - s.shutdown() + s.closeSession() }() s.serve(runCtx) @@ -268,6 +268,19 @@ func (s *Server) reinstallSession(dead *smux.Session) { s.installSession() } +func (s *Server) closeSession() { + s.sessMu.Lock() + if s.session != nil { + _ = s.session.Close() + s.session = nil + } + if s.conn != nil { + _ = s.conn.Close() + s.conn = nil + } + s.sessMu.Unlock() +} + func (s *Server) onData(data []byte) { s.sessMu.RLock() conn := s.conn @@ -321,14 +334,7 @@ func (s *Server) serve(ctx context.Context) { } func (s *Server) shutdown() { - s.sessMu.Lock() - if s.session != nil { - _ = s.session.Close() - } - if s.conn != nil { - _ = s.conn.Close() - } - s.sessMu.Unlock() + s.closeSession() if s.ln != nil { _ = s.ln.Close() }