diff --git a/Source/Core/Core/HW/WiimoteReal/IOdarwin.h b/Source/Core/Core/HW/WiimoteReal/IOdarwin.h index 93a53dfe50..d15f85481d 100644 --- a/Source/Core/Core/HW/WiimoteReal/IOdarwin.h +++ b/Source/Core/Core/HW/WiimoteReal/IOdarwin.h @@ -13,10 +13,12 @@ class WiimoteScannerDarwin final : public WiimoteScannerBackend { public: WiimoteScannerDarwin() = default; - ~WiimoteScannerDarwin() override = default; + ~WiimoteScannerDarwin() override; bool IsReady() const override; void FindWiimotes(std::vector&, Wiimote*&) override; void Update() override {} // not needed +private: + bool stopScanning = false; }; } diff --git a/Source/Core/Core/HW/WiimoteReal/IOdarwin.mm b/Source/Core/Core/HW/WiimoteReal/IOdarwin.mm index 0aada486c4..2b5df642dd 100644 --- a/Source/Core/Core/HW/WiimoteReal/IOdarwin.mm +++ b/Source/Core/Core/HW/WiimoteReal/IOdarwin.mm @@ -21,6 +21,11 @@ namespace WiimoteReal { +WiimoteScannerDarwin::~WiimoteScannerDarwin() +{ + stopScanning = true; +} + void WiimoteScannerDarwin::FindWiimotes(std::vector& found_wiimotes, Wiimote*& found_board) { @@ -54,8 +59,8 @@ void WiimoteScannerDarwin::FindWiimotes(std::vector& found_wiimotes, do { - CFRunLoopRun(); - } while (!sbt->done); + CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, false); + } while (!sbt->done && !stopScanning); int found_devices = [[bti foundDevices] count]; @@ -255,7 +260,6 @@ void WiimoteDarwin::DisablePowerAssertionInternal() aborted:(BOOL)aborted { done = true; - CFRunLoopStop(CFRunLoopGetCurrent()); } - (void)deviceInquiryDeviceFound:(IOBluetoothDeviceInquiry*)sender device:(IOBluetoothDevice*)device