diff --git a/rpcs3/Emu/Io/Dimensions.cpp b/rpcs3/Emu/Io/Dimensions.cpp index 158f310bdb..e80a64c0c9 100644 --- a/rpcs3/Emu/Io/Dimensions.cpp +++ b/rpcs3/Emu/Io/Dimensions.cpp @@ -544,9 +544,7 @@ std::optional> dimensions_toypad::pop_added_removed_response( std::lock_guard lock(m_dimensions_mutex); if (m_figure_added_removed_responses.empty()) - { return std::nullopt; - } std::array response = m_figure_added_removed_responses.front(); m_figure_added_removed_responses.pop(); @@ -597,7 +595,6 @@ void usb_device_dimensions::interrupt_transfer(u32 buf_size, u8* buf, u32 endpoi { // Read Endpoint, if a request has not been sent via the write endpoint, set expected result as // EHCI_CC_HALTED so the game doesn't report the Toypad as being disconnected. - std::lock_guard lock(m_query_mutex); std::optional> response = g_dimensionstoypad.pop_added_removed_response(); if (response) { @@ -696,7 +693,6 @@ void usb_device_dimensions::interrupt_transfer(u32 buf_size, u8* buf, u32 endpoi break; } } - std::lock_guard lock(m_query_mutex); m_queries.push(q_result); break; } diff --git a/rpcs3/Emu/Io/Dimensions.h b/rpcs3/Emu/Io/Dimensions.h index e4886c11f1..e2bfbd1e7f 100644 --- a/rpcs3/Emu/Io/Dimensions.h +++ b/rpcs3/Emu/Io/Dimensions.h @@ -79,6 +79,5 @@ public: void isochronous_transfer(UsbTransfer* transfer) override; protected: - shared_mutex m_query_mutex; std::queue> m_queries; }; diff --git a/rpcs3/Emu/Io/Infinity.cpp b/rpcs3/Emu/Io/Infinity.cpp index ff4ce9e85b..b35879207d 100644 --- a/rpcs3/Emu/Io/Infinity.cpp +++ b/rpcs3/Emu/Io/Infinity.cpp @@ -258,13 +258,13 @@ void infinity_base::get_figure_identifier(u8 fig_num, u8 sequence, std::array> infinity_base::pop_added_removed_response() { - return !m_figure_added_removed_responses.empty(); -} + std::lock_guard lock(infinity_mutex); + + if (m_figure_added_removed_responses.empty()) + return std::nullopt; -std::array infinity_base::pop_added_removed_response() -{ std::array response = m_figure_added_removed_responses.front(); m_figure_added_removed_responses.pop(); return response; @@ -399,9 +399,10 @@ void usb_device_infinity::interrupt_transfer(u32 buf_size, u8* buf, u32 endpoint { // Respond after FF command transfer->expected_time = get_timestamp() + 1000; - if (g_infinitybase.has_figure_been_added_removed()) + std::optional> response = g_infinitybase.pop_added_removed_response(); + if (response) { - memcpy(buf, g_infinitybase.pop_added_removed_response().data(), 0x20); + memcpy(buf, response.value().data(), 0x20); } else if (!m_queries.empty()) { diff --git a/rpcs3/Emu/Io/Infinity.h b/rpcs3/Emu/Io/Infinity.h index 2bfcff245f..c8bb4c6e38 100644 --- a/rpcs3/Emu/Io/Infinity.h +++ b/rpcs3/Emu/Io/Infinity.h @@ -3,6 +3,7 @@ #include "Emu/Io/usb_device.h" #include "Utilities/mutex.h" #include +#include #include struct infinity_figure @@ -24,8 +25,7 @@ public: void query_block(u8 fig_num, u8 block, std::array& reply_buf, u8 sequence); void write_block(u8 fig_num, u8 block, const u8* to_write_buf, std::array& reply_buf, u8 sequence); void get_figure_identifier(u8 fig_num, u8 sequence, std::array& reply_buf); - bool has_figure_been_added_removed() const; - std::array pop_added_removed_response(); + std::optional> pop_added_removed_response(); bool remove_figure(u8 position); u32 load_figure(const std::array& buf, fs::file in_file, u8 position);