From b7aa8c246491a230db938f95a545e30fe248e130 Mon Sep 17 00:00:00 2001 From: Eidolon Date: Tue, 15 Jul 2025 16:37:14 -0500 Subject: [PATCH] Flush 2D on level memory purge --- src/p_setup.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/p_setup.cpp b/src/p_setup.cpp index b6bdc8c65..9111107ec 100644 --- a/src/p_setup.cpp +++ b/src/p_setup.cpp @@ -8434,6 +8434,14 @@ void P_FreeLevelState(void) HWR_ClearAllTextures(); #endif + if (rendermode == render_soft) + { + // Queued draws might reference patches or colormaps about to be freed. + // Flush 2D to make sure no read-after-free occurs. + srb2::rhi::Rhi* rhi = srb2::sys::get_rhi(srb2::sys::g_current_rhi); + srb2::sys::main_hardware_state()->twodee_renderer->flush(*rhi, srb2::g_2d); + } + G_FreeGhosts(); // ghosts are allocated with PU_LEVEL Patch_FreeTag(PU_PATCH_LOWPRIORITY); Patch_FreeTag(PU_PATCH_ROTATED);