diff options
| author | Paul David <paul.david@ettus.com> | 2016-05-11 13:12:17 -0700 | 
|---|---|---|
| committer | Martin Braun <martin.braun@ettus.com> | 2016-06-08 10:36:48 -0700 | 
| commit | fae325d6cbb50a71009bc0c1236bf8750a461e7f (patch) | |
| tree | 47a09e89d6dd32a5c902f1e09d3f11bb621377b0 /host/lib | |
| parent | 17be499295f19809c2b3f444f350d88d90c5a253 (diff) | |
| download | uhd-fae325d6cbb50a71009bc0c1236bf8750a461e7f.tar.gz uhd-fae325d6cbb50a71009bc0c1236bf8750a461e7f.tar.bz2 uhd-fae325d6cbb50a71009bc0c1236bf8750a461e7f.zip  | |
transport: Removing task barrier for conversion calls in the super_recv_packet_handler
Diffstat (limited to 'host/lib')
| -rw-r--r-- | host/lib/transport/super_recv_packet_handler.hpp | 35 | 
1 files changed, 12 insertions, 23 deletions
diff --git a/host/lib/transport/super_recv_packet_handler.hpp b/host/lib/transport/super_recv_packet_handler.hpp index 28adff0d1..5ca18d4a0 100644 --- a/host/lib/transport/super_recv_packet_handler.hpp +++ b/host/lib/transport/super_recv_packet_handler.hpp @@ -24,7 +24,6 @@  #include <uhd/stream.hpp>  #include <uhd/utils/msg.hpp>  #include <uhd/utils/tasks.hpp> -#include <uhd/utils/atomic.hpp>  #include <uhd/utils/byteswap.hpp>  #include <uhd/types/metadata.hpp>  #include <uhd/transport/vrt_if_packet.hpp> @@ -35,7 +34,6 @@  #include <boost/format.hpp>  #include <boost/bind.hpp>  #include <boost/make_shared.hpp> -#include <boost/thread/barrier.hpp>  #include <iostream>  #include <vector> @@ -92,22 +90,15 @@ public:      }      ~recv_packet_handler(void){ -        _task_barrier.interrupt(); -        _task_handlers.clear(); +        /* NOP */      }      //! Resize the number of transport channels      void resize(const size_t size){          if (this->size() == size) return; -        _task_handlers.clear();          _props.resize(size);          //re-initialize all buffers infos by re-creating the vector          _buffers_infos = std::vector<buffers_info_type>(4, buffers_info_type(size)); -        _task_barrier.resize(size); -        _task_handlers.resize(size); -        for (size_t i = 1/*skip 0*/; i < size; i++){ -            _task_handlers[i] = task::make(boost::bind(&recv_packet_handler::converter_thread_task, this, i)); -        };      }      //! Get the channel width of this handler @@ -663,7 +654,9 @@ private:          _convert_bytes_to_copy = bytes_to_copy;          //perform N channels of conversion -        converter_thread_task(0); +        for (size_t i = 0; i < buffs.size(); i++) { +            convert_to_out_buff(i); +        }          //update the copy buffer's availability          info.data_bytes_to_copy -= bytes_to_copy; @@ -676,15 +669,15 @@ private:          return nsamps_to_copy_per_io_buff;      } -    /******************************************************************* -     * Perform one thread's work of the conversion task. -     * The entry and exit use a dual synchronization barrier, -     * to wait for data to become ready and block until completion. -     ******************************************************************/ -    UHD_INLINE void converter_thread_task(const size_t index) +    /*! Run the conversion from the internal buffers to the user's output +     *  buffer. +     * +     * - Calls the converter +     * - Releases internal data buffers +     * - Updates read/write pointers +     */ +    inline void convert_to_out_buff(const size_t index)      { -        _task_barrier.wait(); -          //shortcut references to local data structures          buffers_info_type &buff_info = get_curr_buffer_info();          per_buffer_info_type &info = buff_info[index]; @@ -708,13 +701,9 @@ private:          if (buff_info.data_bytes_to_copy == _convert_bytes_to_copy){              info.buff.reset(); //effectively a release          } - -        if (index == 0) _task_barrier.wait_others();      }      //! Shared variables for the worker threads -    reusable_barrier _task_barrier; -    std::vector<task::sptr> _task_handlers;      size_t _convert_nsamps;      const rx_streamer::buffs_type *_convert_buffs;      size_t _convert_buffer_offset_bytes;  | 
