From 1956b791d4ef2dc27d7f6e609dfb8a07fb462c90 Mon Sep 17 00:00:00 2001 From: Stephen Miller <56742918+StevenMiller123@users.noreply.github.com> Date: Thu, 30 Apr 2026 18:55:04 -0500 Subject: [PATCH] Properly clear handle data on close (#4339) --- src/core/libraries/videoout/driver.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/core/libraries/videoout/driver.cpp b/src/core/libraries/videoout/driver.cpp index 9db70569b..813b5286e 100644 --- a/src/core/libraries/videoout/driver.cpp +++ b/src/core/libraries/videoout/driver.cpp @@ -62,10 +62,26 @@ int VideoOutDriver::Open(const ServiceThreadParams* params) { void VideoOutDriver::Close(s32 handle) { std::scoped_lock lock{mutex}; + // Mark as closed main_port.is_open = false; main_port.flip_rate = 0; main_port.prev_index = -1; + + // Clear port information + std::memset(main_port.buffer_labels.data(), 0, sizeof(main_port.buffer_labels)); + std::memset(main_port.groups.data(), 0, sizeof(main_port.groups)); + std::memset(&main_port.flip_status, 0, sizeof(main_port.flip_status)); + std::memset(&main_port.vblank_status, 0, sizeof(main_port.vblank_status)); + + // Re-initialize buffers + std::memset(main_port.buffer_slots.data(), 0, sizeof(main_port.buffer_slots)); + for (auto& buffer : main_port.buffer_slots) { + buffer.group_index = -1; + } + + // TODO: Remove events? ASSERT(main_port.flip_events.empty()); + ASSERT(main_port.vblank_events.empty()); } VideoOutPort* VideoOutDriver::GetPort(int handle) {