From ff16e678a5d0625b63e4b968820435b9147552da Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Tue, 25 Feb 2020 23:16:55 +0300 Subject: [PATCH] Add thread_count instead of former thread pool --- rpcs3/Emu/RSX/Overlays/overlay_message_dialog.cpp | 9 +++++++-- rpcs3/Emu/RSX/Overlays/overlay_osk.cpp | 7 +++++++ rpcs3/Emu/RSX/Overlays/overlays.cpp | 5 +++++ rpcs3/Emu/RSX/Overlays/overlays.h | 3 ++- 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/rpcs3/Emu/RSX/Overlays/overlay_message_dialog.cpp b/rpcs3/Emu/RSX/Overlays/overlay_message_dialog.cpp index 70a535fe2d..108ffb089c 100644 --- a/rpcs3/Emu/RSX/Overlays/overlay_message_dialog.cpp +++ b/rpcs3/Emu/RSX/Overlays/overlay_message_dialog.cpp @@ -241,6 +241,8 @@ namespace rsx { if (!exit) { + thread_count++; + g_fxo->init("MsgDialog Thread", [&]() { if (interactive) @@ -251,8 +253,6 @@ namespace rsx { rsx_log.error("Dialog input loop exited with error code=%d", error); } - - verify(HERE), ref.get() == static_cast(this); } else { @@ -264,6 +264,11 @@ namespace rsx std::this_thread::sleep_for(16ms); } } + + if (!--thread_count) + { + thread_count.notify_all(); + } }); } } diff --git a/rpcs3/Emu/RSX/Overlays/overlay_osk.cpp b/rpcs3/Emu/RSX/Overlays/overlay_osk.cpp index 5adb0fb1a8..9e11de5a75 100644 --- a/rpcs3/Emu/RSX/Overlays/overlay_osk.cpp +++ b/rpcs3/Emu/RSX/Overlays/overlay_osk.cpp @@ -208,12 +208,19 @@ namespace rsx fade_animation.duration = 0.5f; fade_animation.active = true; + thread_count++; + g_fxo->init("OSK Thread", [this] { if (auto error = run_input_loop()) { rsx_log.error("Osk input loop exited with error code=%d", error); } + + if (!--thread_count) + { + thread_count.notify_all(); + } }); } diff --git a/rpcs3/Emu/RSX/Overlays/overlays.cpp b/rpcs3/Emu/RSX/Overlays/overlays.cpp index 3e05be80cc..3a3e0bb5bc 100644 --- a/rpcs3/Emu/RSX/Overlays/overlays.cpp +++ b/rpcs3/Emu/RSX/Overlays/overlays.cpp @@ -158,6 +158,11 @@ namespace rsx // Force unload exit.release(true); + while (u32 i = thread_count) + { + thread_count.wait(i); + } + pad::SetIntercepted(false); if (on_close && use_callback) diff --git a/rpcs3/Emu/RSX/Overlays/overlays.h b/rpcs3/Emu/RSX/Overlays/overlays.h index caa319d216..33849a1b23 100644 --- a/rpcs3/Emu/RSX/Overlays/overlays.h +++ b/rpcs3/Emu/RSX/Overlays/overlays.h @@ -75,7 +75,8 @@ namespace rsx protected: Timer input_timer; - atomic_t exit{ false }; + atomic_t exit = false; + atomic_t thread_count = 0; std::function on_close;