From 1a892c6b1bf7b2be5e189bb940399bee3c16a9ce Mon Sep 17 00:00:00 2001 From: kd-11 Date: Fri, 20 Sep 2019 13:01:47 +0300 Subject: [PATCH] rsx: Avoid recursion in flip handler --- rpcs3/Emu/RSX/RSXThread.cpp | 9 +++++++++ rpcs3/Emu/RSX/RSXThread.h | 1 + 2 files changed, 10 insertions(+) diff --git a/rpcs3/Emu/RSX/RSXThread.cpp b/rpcs3/Emu/RSX/RSXThread.cpp index a2f0d58828..0c27accec7 100644 --- a/rpcs3/Emu/RSX/RSXThread.cpp +++ b/rpcs3/Emu/RSX/RSXThread.cpp @@ -2604,6 +2604,12 @@ namespace rsx void thread::handle_emu_flip(u32 buffer) { + if (m_queued_flip.in_progress) + { + // Rescursion not allowed! + return; + } + if (m_queued_flip.buffer == ~0u) { // Frame was not queued before flipping @@ -2653,13 +2659,16 @@ namespace rsx int_flip_index++; verify(HERE), m_queued_flip.buffer == buffer; + current_display_buffer = buffer; m_queued_flip.emu_flip = true; + m_queued_flip.in_progress = true; flip(m_queued_flip); last_flip_time = get_system_time() - 1000000; flip_status = CELL_GCM_DISPLAY_FLIP_STATUS_DONE; m_queued_flip.buffer = ~0u; + m_queued_flip.in_progress = false; if (flip_handler) { diff --git a/rpcs3/Emu/RSX/RSXThread.h b/rpcs3/Emu/RSX/RSXThread.h index 502f5553d3..5e1621fedc 100644 --- a/rpcs3/Emu/RSX/RSXThread.h +++ b/rpcs3/Emu/RSX/RSXThread.h @@ -428,6 +428,7 @@ namespace rsx u32 buffer; bool skip_frame; bool emu_flip; + bool in_progress; frame_statistics_t stats; };