wayland: Cap the max key repeat elapsed time

Cap the elapsed time to something sane in case the compositor sends a bad timestamp, which can result it in it looking like the key has been pressed for a *very* long time, bringing everything to a halt while it tries to enqueue all the repeat events.

(cherry picked from commit 05f779f61e)
This commit is contained in:
Frank Praznik
2025-05-21 12:18:36 -04:00
parent 9546c54286
commit ab114490fc

View File

@@ -272,6 +272,15 @@ void Wayland_CreateCursorShapeDevice(struct SDL_WaylandInput *input)
static bool keyboard_repeat_handle(SDL_WaylandKeyboardRepeat *repeat_info, Uint64 elapsed)
{
bool ret = false;
/* Cap the elapsed time to something sane in case the compositor sends a bad timestamp,
* which can result it in it looking like the key has been pressed for a *very* long time,
* bringing everything to a halt while it tries to enqueue all the repeat events.
*
* 3 seconds seems reasonable.
*/
elapsed = SDL_min(elapsed, SDL_MS_TO_NS(3000));
while (elapsed >= repeat_info->next_repeat_ns) {
if (repeat_info->scancode != SDL_SCANCODE_UNKNOWN) {
const Uint64 timestamp = repeat_info->wl_press_time_ns + repeat_info->next_repeat_ns;