summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Blum <josh@joshknows.com>2010-10-04 15:04:53 -0700
committerJosh Blum <josh@joshknows.com>2010-10-04 15:04:53 -0700
commite54aa5ba5a65698a106cc0852b856cab5cd8e767 (patch)
treee484ba7f9b0f81c3f13be776aff952c27ac8bb31
parentb7d828b30bff1f2134319679137f99004f1d4b49 (diff)
parent5bd863efa05f3c6cfd672cffe87f57b33d1c32b5 (diff)
downloaduhd-e54aa5ba5a65698a106cc0852b856cab5cd8e767.tar.gz
uhd-e54aa5ba5a65698a106cc0852b856cab5cd8e767.tar.bz2
uhd-e54aa5ba5a65698a106cc0852b856cab5cd8e767.zip
Merge branch 'timeout' into usrp_e_mmap
-rw-r--r--host/include/uhd/transport/bounded_buffer.ipp16
-rw-r--r--host/lib/transport/libusb1_zero_copy.cpp6
-rw-r--r--host/lib/transport/udp_zero_copy_asio.cpp1
3 files changed, 16 insertions, 7 deletions
diff --git a/host/include/uhd/transport/bounded_buffer.ipp b/host/include/uhd/transport/bounded_buffer.ipp
index 71143741e..58f78bab4 100644
--- a/host/include/uhd/transport/bounded_buffer.ipp
+++ b/host/include/uhd/transport/bounded_buffer.ipp
@@ -73,7 +73,7 @@ namespace uhd{ namespace transport{ namespace{ /*anon*/
UHD_INLINE void pop_with_wait(elem_type &elem){
boost::unique_lock<boost::mutex> lock(_mutex);
_empty_cond.wait(lock, boost::bind(&bounded_buffer_impl<elem_type>::not_empty, this));
- elem = _buffer.back(); _buffer.pop_back();
+ this->pop_back(elem);
lock.unlock();
_full_cond.notify_one();
}
@@ -84,7 +84,7 @@ namespace uhd{ namespace transport{ namespace{ /*anon*/
lock, boost::posix_time::microseconds(long(timeout*1e6)),
boost::bind(&bounded_buffer_impl<elem_type>::not_empty, this)
)) return false;
- elem = _buffer.back(); _buffer.pop_back();
+ this->pop_back(elem);
lock.unlock();
_full_cond.notify_one();
return true;
@@ -104,6 +104,18 @@ namespace uhd{ namespace transport{ namespace{ /*anon*/
bool not_full(void) const{return not _buffer.full();}
bool not_empty(void) const{return not _buffer.empty();}
+
+ /*!
+ * Three part operation to pop an element:
+ * 1) assign elem to the back element
+ * 2) assign the back element to empty
+ * 3) pop the back to move the counter
+ */
+ UHD_INLINE void pop_back(elem_type &elem){
+ elem = _buffer.back();
+ _buffer.back() = elem_type();
+ _buffer.pop_back();
+ }
};
}}} //namespace
diff --git a/host/lib/transport/libusb1_zero_copy.cpp b/host/lib/transport/libusb1_zero_copy.cpp
index ab48e4fc4..819874483 100644
--- a/host/lib/transport/libusb1_zero_copy.cpp
+++ b/host/lib/transport/libusb1_zero_copy.cpp
@@ -22,6 +22,7 @@
#include <boost/shared_array.hpp>
#include <boost/foreach.hpp>
#include <boost/thread.hpp>
+#include <boost/enable_shared_from_this.hpp>
#include <vector>
#include <iostream>
@@ -280,7 +281,6 @@ libusb_transfer *usb_endpoint::get_lut_with_wait(double timeout){
**********************************************************************/
class libusb_zero_copy_impl : public usb_zero_copy, public boost::enable_shared_from_this<libusb_zero_copy_impl> {
public:
- typedef boost::shared_ptr<libusb_zero_copy_impl> sptr;
libusb_zero_copy_impl(
libusb::device_handle::sptr handle,
@@ -335,10 +335,6 @@ libusb_zero_copy_impl::libusb_zero_copy_impl(
if (send_xfer_size == 0) send_xfer_size = DEFAULT_XFER_SIZE;
if (send_num_xfers == 0) send_num_xfers = DEFAULT_NUM_XFERS;
- //sanity check the transfer sizes
- UHD_ASSERT_THROW(recv_xfer_size % 512 == 0);
- UHD_ASSERT_THROW(send_xfer_size % 512 == 0);
-
//store the num xfers for the num frames count
_recv_xfer_size = recv_xfer_size;
_recv_num_frames = recv_num_xfers;
diff --git a/host/lib/transport/udp_zero_copy_asio.cpp b/host/lib/transport/udp_zero_copy_asio.cpp
index 2cf7bde18..e9d91fe45 100644
--- a/host/lib/transport/udp_zero_copy_asio.cpp
+++ b/host/lib/transport/udp_zero_copy_asio.cpp
@@ -25,6 +25,7 @@
#include <boost/asio.hpp>
#include <boost/format.hpp>
#include <boost/thread.hpp>
+#include <boost/enable_shared_from_this.hpp>
#include <iostream>
using namespace uhd;