Fix hang when deleting busses
This commit is contained in:
parent
53379c5482
commit
6c52e3ce11
3 changed files with 13 additions and 2 deletions
|
|
@ -32,7 +32,7 @@ ResourceManager::~ResourceManager()
|
|||
|
||||
for(i2c_smbus_interface* bus : busses)
|
||||
{
|
||||
//delete bus;
|
||||
delete bus;
|
||||
}
|
||||
|
||||
DetectDevicesThread->join();
|
||||
|
|
|
|||
|
|
@ -24,11 +24,16 @@ i2c_smbus_interface::i2c_smbus_interface()
|
|||
this->pci_vendor = -1;
|
||||
this->pci_subsystem_device = -1;
|
||||
this->pci_subsystem_vendor = -1;
|
||||
i2c_smbus_thread_running = true;
|
||||
i2c_smbus_thread = new std::thread(&i2c_smbus_interface::i2c_smbus_thread_function, this);
|
||||
}
|
||||
|
||||
i2c_smbus_interface::~i2c_smbus_interface()
|
||||
{
|
||||
i2c_smbus_thread_running = false;
|
||||
i2c_smbus_start = true;
|
||||
i2c_smbus_start_cv.notify_all();
|
||||
i2c_smbus_thread->join();
|
||||
delete i2c_smbus_thread;
|
||||
}
|
||||
|
||||
|
|
@ -190,6 +195,11 @@ void i2c_smbus_interface::i2c_smbus_thread_function()
|
|||
i2c_smbus_start_cv.wait(start_lock, [this]{ return i2c_smbus_start.load(); });
|
||||
i2c_smbus_start = false;
|
||||
|
||||
if (!i2c_smbus_thread_running.load())
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
i2c_ret = i2c_smbus_xfer(i2c_addr, i2c_read_write, i2c_command, i2c_size, i2c_data);
|
||||
|
||||
std::unique_lock<std::mutex> done_lock(i2c_smbus_done_mutex);
|
||||
|
|
|
|||
|
|
@ -89,7 +89,8 @@ public:
|
|||
virtual s32 i2c_smbus_xfer(u8 addr, char read_write, u8 command, int size, i2c_smbus_data* data) = 0;
|
||||
|
||||
private:
|
||||
std::thread * i2c_smbus_thread;
|
||||
std::thread * i2c_smbus_thread;
|
||||
std::atomic<bool> i2c_smbus_thread_running;
|
||||
|
||||
std::atomic<bool> i2c_smbus_start;
|
||||
std::condition_variable i2c_smbus_start_cv;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue