summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Blum <josh@joshknows.com>2011-04-22 17:02:07 -0700
committerJosh Blum <josh@joshknows.com>2011-04-22 17:02:07 -0700
commit627075e60e0b893a412e849301ccef5bb2e8a68a (patch)
treeef35c3da25ff76dc2feb28677d0e33f54f724cf3
parentef9ca5f928a9ebe4a3f8551698ea4f20f52f6652 (diff)
downloaduhd-627075e60e0b893a412e849301ccef5bb2e8a68a.tar.gz
uhd-627075e60e0b893a412e849301ccef5bb2e8a68a.tar.bz2
uhd-627075e60e0b893a412e849301ccef5bb2e8a68a.zip
uhd: move thread loop condition flag to before barrier (prevents race condition)
-rw-r--r--host/lib/transport/libusb1_zero_copy.cpp2
-rw-r--r--host/lib/usrp/usrp2/io_impl.cpp2
-rw-r--r--host/lib/usrp/usrp_e100/io_impl.cpp2
3 files changed, 3 insertions, 3 deletions
diff --git a/host/lib/transport/libusb1_zero_copy.cpp b/host/lib/transport/libusb1_zero_copy.cpp
index e42cab1d1..ec2077d30 100644
--- a/host/lib/transport/libusb1_zero_copy.cpp
+++ b/host/lib/transport/libusb1_zero_copy.cpp
@@ -277,10 +277,10 @@ private:
bool _threads_running;
void run_event_loop(boost::barrier &spawn_barrier){
+ _threads_running = true;
spawn_barrier.wait();
set_thread_priority_safe();
libusb_context *context = libusb::session::get_global_session()->get_context();
- _threads_running = true;
try{
while(_threads_running){
timeval tv;
diff --git a/host/lib/usrp/usrp2/io_impl.cpp b/host/lib/usrp/usrp2/io_impl.cpp
index 07cbd2432..005be7ce4 100644
--- a/host/lib/usrp/usrp2/io_impl.cpp
+++ b/host/lib/usrp/usrp2/io_impl.cpp
@@ -228,9 +228,9 @@ void usrp2_impl::io_impl::recv_pirate_loop(
zero_copy_if::sptr err_xport,
size_t index
){
+ recv_pirate_crew_raiding = true;
spawn_barrier.wait();
set_thread_priority_safe();
- recv_pirate_crew_raiding = true;
//store a reference to the flow control monitor (offset by max dsps)
flow_control_monitor &fc_mon = *(this->fc_mons[index*usrp2_mboard_impl::MAX_NUM_DSPS]);
diff --git a/host/lib/usrp/usrp_e100/io_impl.cpp b/host/lib/usrp/usrp_e100/io_impl.cpp
index cbab5a761..51ff02d3b 100644
--- a/host/lib/usrp/usrp_e100/io_impl.cpp
+++ b/host/lib/usrp/usrp_e100/io_impl.cpp
@@ -109,9 +109,9 @@ struct usrp_e100_impl::io_impl{
void usrp_e100_impl::io_impl::recv_pirate_loop(
boost::barrier &spawn_barrier, usrp_e100_clock_ctrl::sptr clock_ctrl
){
+ recv_pirate_crew_raiding = true;
spawn_barrier.wait();
set_thread_priority_safe();
- recv_pirate_crew_raiding = true;
while(recv_pirate_crew_raiding){
managed_recv_buffer::sptr buff = this->data_xport->get_recv_buff();