Skip to content

Commit 7513872

Browse files
rgarciacursoragent
andcommitted
fix: don't tear down client on transient Disconnected, unblock OnTrack
- Remove PeerConnectionStateDisconnected from terminal state check in HandleWebSocket — it's a transient ICE state that can self-recover - Spawn forwardRTP as a goroutine inside sync.Once.Do so the OnTrack callback returns immediately instead of blocking forever Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent e70e272 commit 7513872

1 file changed

Lines changed: 4 additions & 4 deletions

File tree

server/lib/webrtcscreen/relay.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ func (r *Relay) Start(ctx context.Context) error {
168168
}
169169
r.mu.Unlock()
170170

171-
r.forwardRTP(track)
171+
go r.forwardRTP(track)
172172
})
173173
})
174174

@@ -329,12 +329,12 @@ func (r *Relay) HandleWebSocket(w http.ResponseWriter, req *http.Request) {
329329
}()
330330

331331
// Register state callback before signaling begins so we never miss
332-
// a terminal transition (e.g. Failed/Closed/Disconnected).
332+
// a terminal transition. Disconnected is transient and can self-recover,
333+
// so only Failed/Closed are treated as terminal.
333334
done := make(chan struct{})
334335
pc.OnConnectionStateChange(func(state webrtc.PeerConnectionState) {
335336
if state == webrtc.PeerConnectionStateFailed ||
336-
state == webrtc.PeerConnectionStateClosed ||
337-
state == webrtc.PeerConnectionStateDisconnected {
337+
state == webrtc.PeerConnectionStateClosed {
338338
select {
339339
case <-done:
340340
default:

0 commit comments

Comments
 (0)