mirror of
https://github.com/J3vb/OwnCord.git
synced 2026-09-03 03:50:00 +03:00
readPump teardown always ran handleVoiceLeave, trusting the joined_at guard in LeaveVoiceChannelIfMatch to protect replacement sessions. On reconnect the voice session TRANSFERS to the replacement client with the same joined_at, so the guard cannot tell the two apart: whenever teardown snapshotted voiceChID before the transfer zeroed it, the old connection deleted the replacement's voice_state row (flaked on the Windows CI runner as TestServeWS_Reconnect_PreservesVoiceState). Gate voice cleanup on !replaced — the same condition the presence-offline broadcast four lines down already uses. A genuinely final disconnect behaves exactly as before, and a stale row from a crashed replacement is still swept by the fresh-connect cleanup. Also deflake TestHub_ConcurrentRegisterUnregister: poll for quiescence with a deadline instead of a fixed 50ms sleep that loses to the -race scheduler on slow runners. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>