From e40e8c27efeb1c09f4e9f20989274e53fcbc602a Mon Sep 17 00:00:00 2001 From: Martin Braun <martin.braun@ettus.com> Date: Fri, 24 Jan 2014 14:01:53 +0100 Subject: uhd: Fix possible freeze-up when using lock/unlock (Solution by Johannes Demel) --- gr-uhd/lib/usrp_source_impl.cc | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'gr-uhd/lib/usrp_source_impl.cc') diff --git a/gr-uhd/lib/usrp_source_impl.cc b/gr-uhd/lib/usrp_source_impl.cc index 318bdb627d..e57db13a0b 100644 --- a/gr-uhd/lib/usrp_source_impl.cc +++ b/gr-uhd/lib/usrp_source_impl.cc @@ -491,9 +491,12 @@ namespace gr { bool usrp_source_impl::start(void) { + boost::recursive_mutex::scoped_lock lock(d_mutex); #ifdef GR_UHD_USE_STREAM_API - _rx_stream = _dev->get_rx_stream(_stream_args); - _samps_per_packet = _rx_stream->get_max_num_samps(); + if(not _rx_stream){ + _rx_stream = _dev->get_rx_stream(_stream_args); + _samps_per_packet = _rx_stream->get_max_num_samps(); + } #endif //setup a stream command that starts streaming slightly in the future static const double reasonable_delay = 0.1; //order of magnitude over RTT @@ -537,8 +540,8 @@ namespace gr { bool usrp_source_impl::stop(void) { + boost::recursive_mutex::scoped_lock lock(d_mutex); this->issue_stream_cmd(::uhd::stream_cmd_t::STREAM_MODE_STOP_CONTINUOUS); - this->flush(); return true; @@ -603,6 +606,7 @@ namespace gr { gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { + boost::recursive_mutex::scoped_lock lock(d_mutex); #ifdef GR_UHD_USE_STREAM_API //In order to allow for low-latency: //We receive all available packets without timeout. -- cgit v1.2.3