diff --git a/ground/openpilotgcs/src/plugins/ophid/inc/ophid_usbmon.h b/ground/openpilotgcs/src/plugins/ophid/inc/ophid_usbmon.h index 178db7a54..20ef05031 100644 --- a/ground/openpilotgcs/src/plugins/ophid/inc/ophid_usbmon.h +++ b/ground/openpilotgcs/src/plugins/ophid/inc/ophid_usbmon.h @@ -32,6 +32,7 @@ #include #include +#include // Arch dependent #if defined(Q_OS_MAC) @@ -202,7 +203,7 @@ private: #ifdef __APPLE__ protected: - bool m_terminate; + QSemaphore m_terminate; void run(); #endif // __APPLE__ diff --git a/ground/openpilotgcs/src/plugins/ophid/src/ophid_usbmon_mac.cpp b/ground/openpilotgcs/src/plugins/ophid/src/ophid_usbmon_mac.cpp index fc95c6eba..8d308a8cf 100644 --- a/ground/openpilotgcs/src/plugins/ophid/src/ophid_usbmon_mac.cpp +++ b/ground/openpilotgcs/src/plugins/ophid/src/ophid_usbmon_mac.cpp @@ -42,24 +42,20 @@ static bool HID_GetStrProperty(IOHIDDeviceRef dev, CFStringRef property, QString /** Initialize the USB monitor here */ -USBMonitor::USBMonitor(QObject *parent) : QThread(parent) +USBMonitor::USBMonitor(QObject *parent) : QThread(parent), m_terminate(1) { m_instance = this; hid_manager = NULL; listMutex = new QMutex(); knowndevices.clear(); qRegisterMetaType("USBPortInfo"); - m_terminate = false; start(); } USBMonitor::~USBMonitor() { - m_terminate = true; - - while (hid_manager != 0) { - this->sleep(10); - } + m_terminate.tryAcquire(); + wait(); } void USBMonitor::deviceEventReceived() @@ -205,7 +201,7 @@ void USBMonitor::run() return; } - while (!m_terminate) { + while (m_terminate.available()) { CFRunLoopRunInMode(kCFRunLoopDefaultMode, 1, false); } IOHIDManagerUnscheduleFromRunLoop(hid_manager, loop, kCFRunLoopDefaultMode);