Found during #44's fix (PR #117). Merge 033b303 dropped the line cb.broadcasterOwner = lobby->broadcaster from RegisterBroadcasterCallbacks (present in parent d339898, added via ba6b5f0). Since then, UnregisterBroadcasterCallbacks (callback_unregistration.cpp:11) never actually unregisters anything in production — it only Clear()s the local registry struct, leaving the real EchoVR::BroadcasterUnlisten call unreached.
Per this repo's devolution-ratchet lesson: this is exactly the "which commit unwired it" pattern — found, not guessed. Restoring the line changes what the game thread does during its own Unregister() path, so it's scoped as its own fix/PR rather than folded into #44 (which fixes a different, off-thread race on the same registry).
Found during #44's fix (PR #117). Merge 033b303 dropped the line
cb.broadcasterOwner = lobby->broadcasterfrom RegisterBroadcasterCallbacks (present in parent d339898, added via ba6b5f0). Since then, UnregisterBroadcasterCallbacks (callback_unregistration.cpp:11) never actually unregisters anything in production — it only Clear()s the local registry struct, leaving the real EchoVR::BroadcasterUnlisten call unreached.Per this repo's devolution-ratchet lesson: this is exactly the "which commit unwired it" pattern — found, not guessed. Restoring the line changes what the game thread does during its own Unregister() path, so it's scoped as its own fix/PR rather than folded into #44 (which fixes a different, off-thread race on the same registry).