From 5e436984a2b5753ad340d2c97462bf3be6e86237 Mon Sep 17 00:00:00 2001 From: Megamouse Date: Sun, 24 Oct 2021 14:48:28 +0200 Subject: [PATCH] cellCamera: fix qt handler crash if object is destroyed from another thread --- rpcs3/rpcs3qt/qt_camera_handler.cpp | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/rpcs3/rpcs3qt/qt_camera_handler.cpp b/rpcs3/rpcs3qt/qt_camera_handler.cpp index 2c679e89cd..f780081c8d 100644 --- a/rpcs3/rpcs3qt/qt_camera_handler.cpp +++ b/rpcs3/rpcs3qt/qt_camera_handler.cpp @@ -1,7 +1,9 @@ #include "stdafx.h" #include "qt_camera_handler.h" #include "Emu/system_config.h" +#include "Emu/System.h" #include "Emu/Io/camera_config.h" +#include "Emu/Cell/lv2/sys_event.h" #include #include @@ -21,7 +23,23 @@ qt_camera_handler::qt_camera_handler() : camera_handler_base() qt_camera_handler::~qt_camera_handler() { - close_camera(); + atomic_t wake_up = false; + + Emu.CallAfter([&]() + { + close_camera(); + m_surface.reset(); + m_camera.reset(); + m_error_handler.reset(); + + wake_up = true; + wake_up.notify_one(); + }); + + while (!wake_up) + { + thread_ctrl::wait_on(wake_up, false); + } } void qt_camera_handler::set_camera(const QCameraInfo& camera_info)