From 3368c277076b76cb256e181f80a9b10751c72746 Mon Sep 17 00:00:00 2001 From: kub Date: Mon, 28 Jun 2021 21:58:01 +0200 Subject: [PATCH] core, fix race condition when waiting for vsync --- platform/common/emu.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/platform/common/emu.c b/platform/common/emu.c index b6792e0f..3f9ccff4 100644 --- a/platform/common/emu.c +++ b/platform/common/emu.c @@ -1358,6 +1358,7 @@ static void emu_loop_prep(void) /* our tick here is 1 us right now */ #define ms_to_ticks(x) (unsigned int)(x * 1000) #define get_ticks() plat_get_ticks_us() +#define vsync_delay_x3 3*ms_to_ticks(1) void emu_loop(void) { @@ -1512,13 +1513,13 @@ void emu_loop(void) diff = timestamp_aim_x3 - timestamp * 3; // sleep or vsync if we are still too fast - if (diff > target_frametime_x3 && (currentConfig.EmuOpt & EOPT_VSYNC)) { + if (diff > target_frametime_x3 + vsync_delay_x3 && (currentConfig.EmuOpt & EOPT_VSYNC)) { // we are too fast plat_video_wait_vsync(); timestamp = get_ticks(); diff = timestamp * 3 - timestamp_aim_x3; } - if (diff > target_frametime_x3) { + if (diff > target_frametime_x3 + vsync_delay_x3) { // still too fast plat_wait_till_us(timestamp + (diff - target_frametime_x3) / 3); } -- 2.39.2