Contexto
Auditoria de bugs (ver BUGS_AUDIT.md). Ciclo de vida do WebRTC no frontend NUI — teardown incorreto e vazamentos de peer connections/streams.
Problemas
- W-01 🔴
web/src/components/WebRTCStreamer.tsx:195 — o efeito principal tem gameData nas deps (}, [on, off, sendNui, gameData])). gameData muda de identidade a cada mensagem NUI, então o cleanup fecha todas as peer connections a cada push de dados → stream morre sem reiniciar.
- W-05 🟠
web/src/components/players/ScreenModal.tsx:85-90 (idem LiveScreensPage.tsx:45-50) — o guard lê o ref selfIdRef.current mas as deps só têm URL/provider; se selfId chega após o mount, o efeito nunca re-roda → viewer nunca registra, "connecting" eterno.
- W-06 🟠
web/src/utils/signaling/fivem-native.ts:50-63 — connect() com novo playerId sobrescreve this._listener sem removeEventListener → sinais despachados N× + vazamento de listener. Relacionado: websocket.ts:44 (if (this.ws) return ignora reconfiguração) e signaling.init troca _active sem disconnect() do provider antigo.
- W-07 🟠
web/src/components/WebRTCStreamer.tsx:169-176 + utils/fivem-renderer.js:61-73 — substituição de startHandler não chama stopStream() antes de startStream() → watcher count fica >0 e o loop WebGL de captura roda para sempre. Idem :72-145: falhas antes de connectionsRef.set(...) (ex.: publishToCF em cf-sfu.ts:70-87) vazam a peer connection.
Severidade: 🔴 Alto — IDs: W-01, W-05, W-06, W-07
Contexto
Auditoria de bugs (ver
BUGS_AUDIT.md). Ciclo de vida do WebRTC no frontend NUI — teardown incorreto e vazamentos de peer connections/streams.Problemas
web/src/components/WebRTCStreamer.tsx:195— o efeito principal temgameDatanas deps (}, [on, off, sendNui, gameData])).gameDatamuda de identidade a cada mensagem NUI, então o cleanup fecha todas as peer connections a cada push de dados → stream morre sem reiniciar.web/src/components/players/ScreenModal.tsx:85-90(idemLiveScreensPage.tsx:45-50) — o guard lê o refselfIdRef.currentmas as deps só têm URL/provider; seselfIdchega após o mount, o efeito nunca re-roda → viewer nunca registra, "connecting" eterno.web/src/utils/signaling/fivem-native.ts:50-63—connect()com novo playerId sobrescrevethis._listenersemremoveEventListener→ sinais despachados N× + vazamento de listener. Relacionado:websocket.ts:44(if (this.ws) returnignora reconfiguração) esignaling.inittroca_activesemdisconnect()do provider antigo.web/src/components/WebRTCStreamer.tsx:169-176+utils/fivem-renderer.js:61-73— substituição destartHandlernão chamastopStream()antes destartStream()→ watcher count fica >0 e o loop WebGL de captura roda para sempre. Idem:72-145: falhas antes deconnectionsRef.set(...)(ex.:publishToCFemcf-sfu.ts:70-87) vazam a peer connection.Severidade: 🔴 Alto — IDs: W-01, W-05, W-06, W-07