diff options
| author | Jordan Woyak <jordan.woyak@gmail.com> | 2013-02-08 16:54:48 -0600 |
|---|---|---|
| committer | Jordan Woyak <jordan.woyak@gmail.com> | 2013-02-08 16:54:48 -0600 |
| commit | 1f1b4a6992553d132de3fc8b097fdfbba78ff556 (patch) | |
| tree | 2894efe558e0a7984bcf2da5e5adf75232c693cb /Source/Core | |
| parent | 1998da867b57a7f6cee3320059e9c259abee64bd (diff) | |
Hopefully make real wiimotes on OSX less crashy.
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/Src/HW/WiimoteReal/IOdarwin.mm | 12 | ||||
| -rw-r--r-- | Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.cpp | 6 |
2 files changed, 11 insertions, 7 deletions
diff --git a/Source/Core/Core/Src/HW/WiimoteReal/IOdarwin.mm b/Source/Core/Core/Src/HW/WiimoteReal/IOdarwin.mm index 2e53daca36..030daa0973 100644 --- a/Source/Core/Core/Src/HW/WiimoteReal/IOdarwin.mm +++ b/Source/Core/Core/Src/HW/WiimoteReal/IOdarwin.mm @@ -40,8 +40,11 @@ { IOBluetoothDevice *device = [l2capChannel getDevice]; WiimoteReal::Wiimote *wm = NULL; + + std::lock_guard<std::recursive_mutex> lk(g_refresh_lock); - for (int i = 0; i < MAX_WIIMOTES; i++) { + for (int i = 0; i < MAX_WIIMOTES; i++) + { if (WiimoteReal::g_wiimotes[i] == NULL) continue; if ([device isEqual: WiimoteReal::g_wiimotes[i]->btd] == TRUE) @@ -77,8 +80,11 @@ { IOBluetoothDevice *device = [l2capChannel getDevice]; WiimoteReal::Wiimote *wm = NULL; + + std::lock_guard<std::recursive_mutex> lk(g_refresh_lock); - for (int i = 0; i < MAX_WIIMOTES; i++) { + for (int i = 0; i < MAX_WIIMOTES; i++) + { if (WiimoteReal::g_wiimotes[i] == NULL) continue; if ([device isEqual: WiimoteReal::g_wiimotes[i]->btd] == TRUE) @@ -236,8 +242,6 @@ int Wiimote::IORead(unsigned char *buf) if (!IsConnected()) return 0; - - // TODO: race conditions here, yo bytes = inputlen; memcpy(buf, input, bytes); diff --git a/Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.cpp b/Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.cpp index 5b8ee72f16..7ae1a9a961 100644 --- a/Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.cpp +++ b/Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.cpp @@ -360,13 +360,13 @@ void Wiimote::ThreadFunc() while (m_run_thread && IsConnected()) { #ifdef __APPLE__ - while (Write()) {} - Common::SleepCurrentThread(1); + // Reading happens elsewhere on OSX + bool const did_something = Write(); #else bool const did_something = Write() || Read(); +#endif if (!did_something) Common::SleepCurrentThread(1); -#endif } } |
