summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Blum <josh@joshknows.com>2010-07-28 17:32:47 -0700
committerJosh Blum <josh@joshknows.com>2010-07-28 17:32:47 -0700
commitc1102144bb4ead3f8cb59c3f6eb52b21531ff12b (patch)
tree4b06ec8d5d3512c04aedce1aae8c4bb9347f6525
parentbbe7dd1c8f1bd8f42a0ae3d28f36c0334b0fd3c8 (diff)
downloaduhd-c1102144bb4ead3f8cb59c3f6eb52b21531ff12b.tar.gz
uhd-c1102144bb4ead3f8cb59c3f6eb52b21531ff12b.tar.bz2
uhd-c1102144bb4ead3f8cb59c3f6eb52b21531ff12b.zip
uhd: alignment buffer timeout abs time fix
-rw-r--r--host/include/uhd/transport/alignment_buffer.ipp13
1 files changed, 10 insertions, 3 deletions
diff --git a/host/include/uhd/transport/alignment_buffer.ipp b/host/include/uhd/transport/alignment_buffer.ipp
index ed7cfd26c..61b3b60f5 100644
--- a/host/include/uhd/transport/alignment_buffer.ipp
+++ b/host/include/uhd/transport/alignment_buffer.ipp
@@ -57,12 +57,15 @@ namespace uhd{ namespace transport{ namespace{ /*anon*/
std::vector<elem_type> &elems,
const time_duration_t &time
){
+ boost::system_time exit_time = boost::get_system_time() + time;
buff_contents_type buff_contents_tmp;
std::list<size_t> indexes_to_do(_all_indexes);
//do an initial pop to load an initial sequence id
size_t index = indexes_to_do.front();
- if (not _buffs[index]->pop_with_timed_wait(buff_contents_tmp, time)) return false;
+ if (not _buffs[index]->pop_with_timed_wait(
+ buff_contents_tmp, exit_time - boost::get_system_time()
+ )) return false;
elems[index] = buff_contents_tmp.first;
seq_type expected_seq_id = buff_contents_tmp.second;
indexes_to_do.pop_front();
@@ -75,7 +78,9 @@ namespace uhd{ namespace transport{ namespace{ /*anon*/
_there_was_a_clear = false;
indexes_to_do = _all_indexes;
index = indexes_to_do.front();
- if (not _buffs[index]->pop_with_timed_wait(buff_contents_tmp, time)) return false;
+ if (not _buffs[index]->pop_with_timed_wait(
+ buff_contents_tmp, exit_time - boost::get_system_time()
+ )) return false;
elems[index] = buff_contents_tmp.first;
expected_seq_id = buff_contents_tmp.second;
indexes_to_do.pop_front();
@@ -83,7 +88,9 @@ namespace uhd{ namespace transport{ namespace{ /*anon*/
//pop an element off for this index
index = indexes_to_do.front();
- if (not _buffs[index]->pop_with_timed_wait(buff_contents_tmp, time)) return false;
+ if (not _buffs[index]->pop_with_timed_wait(
+ buff_contents_tmp, exit_time - boost::get_system_time()
+ )) return false;
//if the sequence id matches:
// store the popped element into the output,