Fix sync loop by adding a 20ms break for the next mute sync (#1742)

* fix sync loop by adding a 20ms break for the next mute sync

---------

Signed-off-by: Timo K <toger5@hotmail.de>
This commit is contained in:
Timo
2023-10-12 10:51:37 +02:00
committed by GitHub
parent 94c4b4fd6a
commit 5262af7000

View File

@@ -166,6 +166,12 @@ export function useLiveKit(
logger.error("Failed to sync audio mute state with LiveKit", e); logger.error("Failed to sync audio mute state with LiveKit", e);
} }
audioMuteUpdating.current = false; audioMuteUpdating.current = false;
// await participant.setMicrophoneEnabled can return immediately in some instances,
// so that participant.isMicrophoneEnabled !== buttonEnabled.current.audio still holds true.
// This happens if the device is still in a pending state
// "sleeping" here makes sure we let react do its thing so that participant.isMicrophoneEnabled is updated,
// so we do not end up in a recursion loop.
await new Promise((r) => setTimeout(r, 20));
// Run the check again after the change is done. Because the user // Run the check again after the change is done. Because the user
// can update the state (presses mute button) while the device is enabling // can update the state (presses mute button) while the device is enabling
// itself we need might need to update the mute state right away. // itself we need might need to update the mute state right away.
@@ -187,6 +193,8 @@ export function useLiveKit(
} }
videoMuteUpdating.current = false; videoMuteUpdating.current = false;
// see above // see above
await new Promise((r) => setTimeout(r, 20));
// see above
syncMuteStateVideo(); syncMuteStateVideo();
} }
}; };