From bd3bd0dfbc1a87af5839c9b23450434cfb9c763c Mon Sep 17 00:00:00 2001
From: Nick Foster <nick@nerdnetworks.org>
Date: Fri, 1 Oct 2010 16:08:37 -0700
Subject: UHD: added mutex to fix race condition in device enumeration.

---
 host/lib/transport/libusb1_base.cpp | 4 ++++
 1 file changed, 4 insertions(+)

(limited to 'host/lib')

diff --git a/host/lib/transport/libusb1_base.cpp b/host/lib/transport/libusb1_base.cpp
index 910b04fc8..1dd0b48e8 100644
--- a/host/lib/transport/libusb1_base.cpp
+++ b/host/lib/transport/libusb1_base.cpp
@@ -35,7 +35,9 @@ public:
     libusb_session_impl(void){
         UHD_ASSERT_THROW(libusb_init(&_context) == 0);
         libusb_set_debug(_context, debug_level);
+        _mutex.lock();
         _thread_group.create_thread(boost::bind(&libusb_session_impl::run_event_loop, this));
+        _mutex.lock();
     }
 
     ~libusb_session_impl(void){
@@ -52,11 +54,13 @@ private:
     libusb_context *_context;
     boost::thread_group _thread_group;
     bool _running;
+    boost::mutex _mutex;
 
     void run_event_loop(void){
         set_thread_priority_safe();
         _running = true;
         timeval tv;
+        _mutex.unlock();
         while(_running){
             tv.tv_sec = 0;
             tv.tv_usec = 100000; //100ms
-- 
cgit v1.2.3