summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorJordan Woyak <jordan.woyak@gmail.com>2013-02-08 16:54:48 -0600
committerJordan Woyak <jordan.woyak@gmail.com>2013-02-08 16:54:48 -0600
commit1f1b4a6992553d132de3fc8b097fdfbba78ff556 (patch)
tree2894efe558e0a7984bcf2da5e5adf75232c693cb /Source/Core
parent1998da867b57a7f6cee3320059e9c259abee64bd (diff)
Hopefully make real wiimotes on OSX less crashy.
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/Src/HW/WiimoteReal/IOdarwin.mm12
-rw-r--r--Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.cpp6
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
}
}