Fix UB
Some checks are pending
Generate Translation Template / Generate Translation Template (push) Waiting to run
Build RPCS3 / RPCS3 Linux ubuntu-24.04 gcc (push) Waiting to run
Build RPCS3 / RPCS3 Linux ubuntu-24.04-arm clang (push) Waiting to run
Build RPCS3 / RPCS3 Linux ubuntu-24.04 clang (push) Waiting to run
Build RPCS3 / RPCS3 Windows (push) Waiting to run

Reference exists after destructor is called.
This commit is contained in:
elad335 2025-05-14 02:00:02 +03:00 committed by Elad
parent 208c4e2af2
commit 3f2075070a
11 changed files with 22 additions and 73 deletions

View file

@ -107,13 +107,8 @@ struct cross_controller
void stop_thread() void stop_thread()
{ {
if (connection_thread) // Join thread
{
auto& thread = *connection_thread;
thread = thread_state::aborting;
thread();
connection_thread.reset(); connection_thread.reset();
}
}; };
}; };

View file

@ -828,13 +828,8 @@ void rec_info::stop_video_provider(bool flush)
{ {
cellRec.notice("Stopping video provider."); cellRec.notice("Stopping video provider.");
if (video_provider_thread) // Join thread
{
auto& thread = *video_provider_thread;
thread = thread_state::aborting;
thread();
video_provider_thread.reset(); video_provider_thread.reset();
}
// Flush the ringbuffer if necessary. // Flush the ringbuffer if necessary.
// This should only happen if the video sink is not the encoder itself. // This should only happen if the video sink is not the encoder itself.

View file

@ -59,14 +59,8 @@ struct sce_np_util_manager
void join_thread() void join_thread()
{ {
if (bandwidth_test_thread)
{
auto& thread = *bandwidth_test_thread;
thread = thread_state::aborting;
thread();
bandwidth_test_thread.reset(); bandwidth_test_thread.reset();
} }
}
}; };
error_code sceNpUtilBandwidthTestInitStart([[maybe_unused]] ppu_thread& ppu, u32 prio, u32 stack) error_code sceNpUtilBandwidthTestInitStart([[maybe_unused]] ppu_thread& ppu, u32 prio, u32 stack)

View file

@ -88,14 +88,8 @@ static void clear_sdl_joysticks(std::map<u64, std::vector<SDL_Joystick*>>& joyst
usb_device_logitech_g27::~usb_device_logitech_g27() usb_device_logitech_g27::~usb_device_logitech_g27()
{ {
// wait for the house keeping thread to finish // Wait for the house keeping thread to finish
if (m_house_keeping_thread)
{
auto& thread = *m_house_keeping_thread;
thread = thread_state::aborting;
thread();
m_house_keeping_thread.reset(); m_house_keeping_thread.reset();
}
// Close sdl handles // Close sdl handles
{ {

View file

@ -47,13 +47,8 @@ gui_pad_thread::gui_pad_thread()
gui_pad_thread::~gui_pad_thread() gui_pad_thread::~gui_pad_thread()
{ {
if (m_thread) // Join thread
{
auto& thread = *m_thread;
thread = thread_state::aborting;
thread();
m_thread.reset(); m_thread.reset();
}
#ifdef __linux__ #ifdef __linux__
if (m_uinput_fd != 1) if (m_uinput_fd != 1)

View file

@ -101,12 +101,8 @@ hid_pad_handler<Device>::hid_pad_handler(pad_handler type, std::vector<id_pair>
template <class Device> template <class Device>
hid_pad_handler<Device>::~hid_pad_handler() hid_pad_handler<Device>::~hid_pad_handler()
{ {
if (m_enumeration_thread) // Join thread
{ m_enumeration_thread.reset();
auto& enumeration_thread = *m_enumeration_thread;
enumeration_thread = thread_state::aborting;
enumeration_thread();
}
for (auto& controller : m_controllers) for (auto& controller : m_controllers)
{ {

View file

@ -309,13 +309,10 @@ void pad_thread::operator()()
for (auto& thread : threads) for (auto& thread : threads)
{ {
if (thread) // Join thread (ordered explicitly)
{ thread.reset();
auto& enumeration_thread = *thread;
enumeration_thread = thread_state::aborting;
enumeration_thread();
}
} }
threads.clear(); threads.clear();
input_log.notice("Pad threads stopped"); input_log.notice("Pad threads stopped");

View file

@ -277,13 +277,8 @@ void raw_mouse::update_values(s32 scan_code, bool pressed)
raw_mouse_handler::~raw_mouse_handler() raw_mouse_handler::~raw_mouse_handler()
{ {
if (m_thread) // Join thread
{
auto& thread = *m_thread;
thread = thread_state::aborting;
thread();
m_thread.reset(); m_thread.reset();
}
#ifdef _WIN32 #ifdef _WIN32
unregister_raw_input_devices(); unregister_raw_input_devices();

View file

@ -231,13 +231,9 @@ pad_motion_settings_dialog::pad_motion_settings_dialog(QDialog* parent, std::sha
pad_motion_settings_dialog::~pad_motion_settings_dialog() pad_motion_settings_dialog::~pad_motion_settings_dialog()
{ {
if (m_input_thread) // Join thread
{
m_input_thread_state = input_thread_state::pausing; m_input_thread_state = input_thread_state::pausing;
auto& thread = *m_input_thread; m_input_thread.reset();
thread = thread_state::aborting;
thread();
}
} }
void pad_motion_settings_dialog::change_device(int index) void pad_motion_settings_dialog::change_device(int index)

View file

@ -269,13 +269,8 @@ ps_move_tracker_dialog::~ps_move_tracker_dialog()
m_camera_handler->close_camera(); m_camera_handler->close_camera();
} }
if (m_input_thread) // Join thread
{
auto& thread = *m_input_thread;
thread = thread_state::aborting;
thread();
m_input_thread.reset(); m_input_thread.reset();
}
} }
void ps_move_tracker_dialog::update_color(bool update_sliders) void ps_move_tracker_dialog::update_color(bool update_sliders)

View file

@ -827,10 +827,7 @@ namespace utils
} }
} }
auto& thread = *m_thread; // Join thread
thread = thread_state::aborting;
thread();
m_thread.reset(); m_thread.reset();
} }