From e3452bf969552abf2497dbd7ac8ed093a3f36de3 Mon Sep 17 00:00:00 2001 From: Josh Blum Date: Mon, 29 Oct 2012 17:39:32 -0700 Subject: uhd: added barrier interrupt to work around thread issue Force the barrier wait to throw a boost::thread_interrupted The threads were not getting the interruption_point on windows. --- host/include/uhd/utils/atomic.hpp | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'host/include') diff --git a/host/include/uhd/utils/atomic.hpp b/host/include/uhd/utils/atomic.hpp index dc1790c3f..7a81d8d5e 100644 --- a/host/include/uhd/utils/atomic.hpp +++ b/host/include/uhd/utils/atomic.hpp @@ -82,12 +82,23 @@ namespace uhd{ _count.write(size); } + /*! + * Force the barrier wait to throw a boost::thread_interrupted + * The threads were not getting the interruption_point on windows. + */ + void interrupt(void) + { + _count.write(boost::uint32_t(~0)); + } + //! Wait on the barrier condition UHD_INLINE void wait(void){ _count.dec(); _count.cas(_size, 0); while (_count.read() != _size){ boost::this_thread::interruption_point(); + if (_count.read() == boost::uint32_t(~0)) + throw boost::thread_interrupted(); boost::this_thread::yield(); } } -- cgit v1.2.3