From 66e7b594246009610fa192b5ffb87e086e79358a Mon Sep 17 00:00:00 2001 From: Oliver Kowalke Date: Sat, 5 Sep 2015 11:57:36 +0200 Subject: [PATCH] fix usage of std::chrono --- include/boost/fiber/bounded_channel.hpp | 12 ++-- include/boost/fiber/condition.hpp | 3 +- include/boost/fiber/fiber_manager.hpp | 23 ++++---- .../fiber/future/detail/shared_state.hpp | 20 ++++--- include/boost/fiber/future/future.hpp | 56 ++++--------------- include/boost/fiber/recursive_timed_mutex.hpp | 8 +-- include/boost/fiber/timed_mutex.hpp | 8 +-- src/fiber_manager.cpp | 4 +- src/recursive_timed_mutex.cpp | 2 +- src/timed_mutex.cpp | 2 +- test/test_condition.cpp | 1 + test/test_condition_mt.cpp | 2 +- test/test_mutex.cpp | 1 + test/test_mutex_mt.cpp | 1 + 14 files changed, 59 insertions(+), 84 deletions(-) diff --git a/include/boost/fiber/bounded_channel.hpp b/include/boost/fiber/bounded_channel.hpp index 06a0cd65..2199f750 100644 --- a/include/boost/fiber/bounded_channel.hpp +++ b/include/boost/fiber/bounded_channel.hpp @@ -287,21 +287,21 @@ public: template< typename Rep, typename Period > channel_op_status push_wait_for( value_type const& va, - std::chrono::duration< Rep, Period > const& timeout_duration) { + std::chrono::duration< Rep, Period > const& timeout_duration) { return push_wait_until( va, std::chrono::steady_clock::now() + timeout_duration); } template< typename Rep, typename Period > channel_op_status push_wait_for( value_type && va, - std::chrono::duration< Rep, Period > const& timeout_duration) { + std::chrono::duration< Rep, Period > const& timeout_duration) { return push_wait_until( std::forward< value_type >( va), std::chrono::steady_clock::now() + timeout_duration); } template< typename Clock, typename Duration > channel_op_status push_wait_until( value_type const& va, - std::chrono::time_point< Clock, Duration > const& timeout_time) { + std::chrono::time_point< Clock, Duration > const& timeout_time) { typename node::ptr new_node( new ( alloc_.allocate( 1) ) node( va, alloc_) ); std::unique_lock< mutex > lk( mtx_); @@ -310,7 +310,7 @@ public: template< typename Clock, typename Duration > channel_op_status push_wait_until( value_type && va, - std::chrono::time_point< Clock, Duration > const& timeout_time) { + std::chrono::time_point< Clock, Duration > const& timeout_time) { typename node::ptr new_node( new ( alloc_.allocate( 1) ) node( std::forward< value_type >( va), alloc_) ); std::unique_lock< mutex > lk( mtx_); @@ -383,14 +383,14 @@ public: template< typename Rep, typename Period > channel_op_status pop_wait_for( value_type & va, - std::chrono::duration< Rep, Period > const& timeout_duration) { + std::chrono::duration< Rep, Period > const& timeout_duration) { return pop_wait_until( va, std::chrono::steady_clock::now() + timeout_duration); } template< typename Clock, typename Duration > channel_op_status pop_wait_until( value_type & va, - std::chrono::time_point< Clock, Duration > const& timeout_time) { + std::chrono::time_point< Clock, Duration > const& timeout_time) { std::unique_lock< mutex > lk( mtx_); while ( ! is_closed_() && is_empty_() ) { diff --git a/include/boost/fiber/condition.hpp b/include/boost/fiber/condition.hpp index 23d7a8aa..f50e7d05 100644 --- a/include/boost/fiber/condition.hpp +++ b/include/boost/fiber/condition.hpp @@ -94,9 +94,8 @@ public: } template< typename LockType, typename Clock, typename Duration > - cv_status wait_until( LockType & lt, std::chrono::time_point< Clock, Duration > const& timeout_time_) { + cv_status wait_until( LockType & lt, std::chrono::time_point< Clock, Duration > const& timeout_time) { cv_status status = cv_status::no_timeout; - std::chrono::steady_clock::time_point timeout_time( detail::convert_tp( timeout_time_) ); fiber_context * f( detail::scheduler::instance()->active() ); try { diff --git a/include/boost/fiber/fiber_manager.hpp b/include/boost/fiber/fiber_manager.hpp index 6e575426..35c2bed3 100644 --- a/include/boost/fiber/fiber_manager.hpp +++ b/include/boost/fiber/fiber_manager.hpp @@ -32,17 +32,20 @@ struct sched_algorithm; struct BOOST_FIBERS_DECL fiber_manager { private: - typedef detail::waiting_queue wqueue_t; - typedef detail::terminated_queue tqueue_t; + typedef detail::waiting_queue wqueue_t; + typedef detail::terminated_queue tqueue_t; - std::unique_ptr< sched_algorithm > sched_algo_; - fiber_context * active_fiber_; - wqueue_t wqueue_; - tqueue_t tqueue_; + std::unique_ptr< sched_algorithm > sched_algo_; + fiber_context * active_fiber_; + wqueue_t wqueue_; + tqueue_t tqueue_; std::chrono::steady_clock::duration wait_interval_; void resume_( fiber_context *); + bool wait_until_( std::chrono::steady_clock::time_point const&, + detail::spinlock_lock &); + public: fiber_manager() noexcept; @@ -57,21 +60,19 @@ public: void wait( detail::spinlock_lock &); - bool wait_until( std::chrono::steady_clock::time_point const&, - detail::spinlock_lock &); - template< typename Clock, typename Duration > bool wait_until( std::chrono::time_point< Clock, Duration > const& timeout_time_, detail::spinlock_lock & lk) { std::chrono::steady_clock::time_point timeout_time( detail::convert_tp( timeout_time_) ); - return wait_until( timeout_time, lk); + return wait_until_( timeout_time, lk); } template< typename Rep, typename Period > bool wait_for( std::chrono::duration< Rep, Period > const& timeout_duration, detail::spinlock_lock & lk) { - return wait_until( std::chrono::steady_clock::now() + timeout_duration, lk); + return wait_until_( + std::chrono::steady_clock::now() + timeout_duration, lk); } void yield(); diff --git a/include/boost/fiber/future/detail/shared_state.hpp b/include/boost/fiber/future/detail/shared_state.hpp index 84395faf..f0a6617a 100644 --- a/include/boost/fiber/future/detail/shared_state.hpp +++ b/include/boost/fiber/future/detail/shared_state.hpp @@ -112,8 +112,9 @@ private: return future_status::ready; } + template< typename Clock, typename Duration > future_status wait_until_( std::unique_lock< mutex > & lk, - std::chrono::steady_clock::time_point const& timeout_time) const { + std::chrono::time_point< Clock, Duration > const& timeout_time) const { while ( ! ready_) { cv_status st( waiters_.wait_until( lk, timeout_time) ); if ( cv_status::timeout == st && ! ready_) { @@ -181,7 +182,8 @@ public: return wait_for_( lk, timeout_duration); } - future_status wait_until( std::chrono::steady_clock::time_point const& timeout_time) const { + template< typename Clock, typename Duration > + future_status wait_until( std::chrono::time_point< Clock, Duration > const& timeout_time) const { std::unique_lock< mutex > lk( mtx_); return wait_until_( lk, timeout_time); } @@ -274,8 +276,9 @@ private: return future_status::ready; } + template< typename Clock, typename Duration > future_status wait_until_( std::unique_lock< mutex > & lk, - std::chrono::steady_clock::time_point const& timeout_time) const { + std::chrono::time_point< Clock, Duration > const& timeout_time) const { while ( ! ready_) { cv_status st( waiters_.wait_until( lk, timeout_time) ); if ( cv_status::timeout == st && ! ready_) { @@ -338,7 +341,8 @@ public: return wait_for_( lk, timeout_duration); } - future_status wait_until( std::chrono::steady_clock::time_point const& timeout_time) const { + template< typename Clock, typename Duration > + future_status wait_until( std::chrono::time_point< Clock, Duration > const& timeout_time) const { std::unique_lock< mutex > lk( mtx_); return wait_until_( lk, timeout_time); } @@ -435,9 +439,9 @@ private: return future_status::ready; } - inline + template< typename Clock, typename Duration > future_status wait_until_( std::unique_lock< mutex > & lk, - std::chrono::steady_clock::time_point const& timeout_time) const { + std::chrono::time_point< Clock, Duration > const& timeout_time) const { while ( ! ready_) { cv_status st( waiters_.wait_until( lk, timeout_time) ); if ( cv_status::timeout == st && ! ready_) { @@ -505,8 +509,8 @@ public: return wait_for_( lk, timeout_duration); } - inline - future_status wait_until( std::chrono::steady_clock::time_point const& timeout_time) const { + template< typename Clock, typename Duration > + future_status wait_until( std::chrono::time_point< Clock, Duration > const& timeout_time) const { std::unique_lock< mutex > lk( mtx_); return wait_until_( lk, timeout_time); } diff --git a/include/boost/fiber/future/future.hpp b/include/boost/fiber/future/future.hpp index efef3602..7dd9ef50 100644 --- a/include/boost/fiber/future/future.hpp +++ b/include/boost/fiber/future/future.hpp @@ -102,18 +102,13 @@ public: return state_->wait_for( timeout_duration); } - future_status wait_until( std::chrono::steady_clock::time_point const& timeout_time) const { + template< typename Clock, typename Duration > + future_status wait_until( std::chrono::time_point< Clock, Duration > const& timeout_time) const { if ( ! valid() ) { throw future_uninitialized(); } return state_->wait_until( timeout_time); } - - template< typename Clock, typename Duration > - future_status wait_until( std::chrono::time_point< Clock, Duration > const& timeout_time_) const { - std::chrono::steady_clock::time_point timeout_time( detail::convert_tp( timeout_time_) ); - return wait_until( timeout_time); - } }; template< typename R > @@ -188,18 +183,13 @@ public: return state_->wait_for( timeout_duration); } - future_status wait_until( std::chrono::steady_clock::time_point const& timeout_time) const { + template< typename Clock, typename Duration > + future_status wait_until( std::chrono::time_point< Clock, Duration > const& timeout_time) const { if ( ! valid() ) { throw future_uninitialized(); } return state_->wait_until( timeout_time); } - - template< typename Clock, typename Duration > - future_status wait_until( std::chrono::time_point< Clock, Duration > const& timeout_time_) const { - std::chrono::steady_clock::time_point timeout_time( detail::convert_tp( timeout_time_) ); - return wait_until( timeout_time); - } }; template<> @@ -280,19 +270,13 @@ public: return state_->wait_for( timeout_duration); } - inline - future_status wait_until( std::chrono::steady_clock::time_point const& timeout_time) const { + template< typename Clock, typename Duration > + future_status wait_until( std::chrono::time_point< Clock, Duration > const& timeout_time) const { if ( ! valid() ) { throw future_uninitialized(); } return state_->wait_until( timeout_time); } - - template< typename Clock, typename Duration > - future_status wait_until( std::chrono::time_point< Clock, Duration > const& timeout_time_) const { - std::chrono::steady_clock::time_point timeout_time( detail::convert_tp( timeout_time_) ); - return wait_until( timeout_time); - } }; @@ -381,18 +365,13 @@ public: return state_->wait_for( timeout_duration); } - future_status wait_until( std::chrono::steady_clock::time_point const& timeout_time) const { + template< typename Clock, typename Duration > + future_status wait_until( std::chrono::time_point< Clock, Duration > const& timeout_time) const { if ( ! valid() ) { throw future_uninitialized(); } return state_->wait_until( timeout_time); } - - template< typename Clock, typename Duration > - future_status wait_until( std::chrono::time_point< Clock, Duration > const& timeout_time_) const { - std::chrono::steady_clock::time_point timeout_time( detail::convert_tp( timeout_time_) ); - return wait_until( timeout_time); - } }; template< typename R > @@ -480,18 +459,13 @@ public: return state_->wait_for( timeout_duration); } - future_status wait_until( std::chrono::steady_clock::time_point const& timeout_time) const { + template< typename Clock, typename Duration > + future_status wait_until( std::chrono::time_point< Clock, Duration > const& timeout_time) const { if ( ! valid() ) { throw future_uninitialized(); } return state_->wait_until( timeout_time); } - - template< typename Clock, typename Duration > - future_status wait_until( std::chrono::time_point< Clock, Duration > const& timeout_time_) const { - std::chrono::steady_clock::time_point timeout_time( detail::convert_tp( timeout_time_) ); - return wait_until( timeout_time); - } }; template<> @@ -590,19 +564,13 @@ public: return state_->wait_for( timeout_duration); } - inline - future_status wait_until( std::chrono::steady_clock::time_point const& timeout_time) const { + template< typename Clock, typename Duration > + future_status wait_until( std::chrono::time_point< Clock, Duration > const& timeout_time) const { if ( ! valid() ) { throw future_uninitialized(); } return state_->wait_until( timeout_time); } - - template< typename Clock, typename Duration > - future_status wait_until( std::chrono::time_point< Clock, Duration > const& timeout_time_) const { - std::chrono::steady_clock::time_point timeout_time( detail::convert_tp( timeout_time_) ); - return wait_until( timeout_time); - } }; diff --git a/include/boost/fiber/recursive_timed_mutex.hpp b/include/boost/fiber/recursive_timed_mutex.hpp index 35103d6e..15c1e7dd 100644 --- a/include/boost/fiber/recursive_timed_mutex.hpp +++ b/include/boost/fiber/recursive_timed_mutex.hpp @@ -42,6 +42,8 @@ private: bool lock_if_unlocked_(); + bool try_lock_until_( std::chrono::steady_clock::time_point const& timeout_time); + public: recursive_timed_mutex(); @@ -54,18 +56,16 @@ public: bool try_lock(); - bool try_lock_until( std::chrono::steady_clock::time_point const& timeout_time); - template< typename Clock, typename Duration > bool try_lock_until( std::chrono::time_point< Clock, Duration > const& timeout_time_) { std::chrono::steady_clock::time_point timeout_time( detail::convert_tp( timeout_time_) ); - return try_lock_until( timeout_time); + return try_lock_until_( timeout_time); } template< typename Rep, typename Period > bool try_lock_for( std::chrono::duration< Rep, Period > const& timeout_duration) { - return try_lock_until( std::chrono::steady_clock::now() + timeout_duration); + return try_lock_until_( std::chrono::steady_clock::now() + timeout_duration); } void unlock(); diff --git a/include/boost/fiber/timed_mutex.hpp b/include/boost/fiber/timed_mutex.hpp index d6da7266..f30bbe20 100644 --- a/include/boost/fiber/timed_mutex.hpp +++ b/include/boost/fiber/timed_mutex.hpp @@ -38,6 +38,8 @@ private: bool lock_if_unlocked_(); + bool try_lock_until_( std::chrono::steady_clock::time_point const& timeout_time); + public: timed_mutex(); @@ -50,18 +52,16 @@ public: bool try_lock(); - bool try_lock_until( std::chrono::steady_clock::time_point const& timeout_time); - template< typename Clock, typename Duration > bool try_lock_until( std::chrono::time_point< Clock, Duration > const& timeout_time_) { std::chrono::steady_clock::time_point timeout_time( detail::convert_tp( timeout_time_) ); - return try_lock_until( timeout_time); + return try_lock_until_( timeout_time); } template< typename Rep, typename Period > bool try_lock_for( std::chrono::duration< Rep, Period > const& timeout_duration) { - return try_lock_until( std::chrono::steady_clock::now() + timeout_duration); + return try_lock_until_( std::chrono::steady_clock::now() + timeout_duration); } void unlock(); diff --git a/src/fiber_manager.cpp b/src/fiber_manager.cpp index 5b522931..d4832ed6 100644 --- a/src/fiber_manager.cpp +++ b/src/fiber_manager.cpp @@ -134,8 +134,8 @@ fiber_manager::wait( detail::spinlock_lock & lk) { } bool -fiber_manager::wait_until( std::chrono::steady_clock::time_point const& timeout_time, - detail::spinlock_lock & lk) { +fiber_manager::wait_until_( std::chrono::steady_clock::time_point const& timeout_time, + detail::spinlock_lock & lk) { BOOST_ASSERT( active_fiber_->is_running() ); // set active-fiber to state_waiting active_fiber_->set_waiting(); diff --git a/src/recursive_timed_mutex.cpp b/src/recursive_timed_mutex.cpp index 3d89a55b..101e0c5f 100644 --- a/src/recursive_timed_mutex.cpp +++ b/src/recursive_timed_mutex.cpp @@ -87,7 +87,7 @@ recursive_timed_mutex::try_lock() { } bool -recursive_timed_mutex::try_lock_until( std::chrono::steady_clock::time_point const& timeout_time) { +recursive_timed_mutex::try_lock_until_( std::chrono::steady_clock::time_point const& timeout_time) { fiber_context * f( detail::scheduler::instance()->active() ); BOOST_ASSERT( nullptr != f); for (;;) { diff --git a/src/timed_mutex.cpp b/src/timed_mutex.cpp index 2139edf4..274ea2f9 100644 --- a/src/timed_mutex.cpp +++ b/src/timed_mutex.cpp @@ -81,7 +81,7 @@ timed_mutex::try_lock() { } bool -timed_mutex::try_lock_until( std::chrono::steady_clock::time_point const& timeout_time) { +timed_mutex::try_lock_until_( std::chrono::steady_clock::time_point const& timeout_time) { fiber_context * f( detail::scheduler::instance()->active() ); BOOST_ASSERT( nullptr != f); for (;;) { diff --git a/test/test_condition.cpp b/test/test_condition.cpp index 79f21bb5..7cde5a75 100644 --- a/test/test_condition.cpp +++ b/test/test_condition.cpp @@ -6,6 +6,7 @@ // // This test is based on the tests of Boost.Thread +#include #include #include #include diff --git a/test/test_condition_mt.cpp b/test/test_condition_mt.cpp index ef72ac62..0a7c7c43 100644 --- a/test/test_condition_mt.cpp +++ b/test/test_condition_mt.cpp @@ -6,6 +6,7 @@ // // This test is based on the tests of Boost.Thread +#include #include #include #include @@ -16,7 +17,6 @@ #include #include -#include #include #include #include diff --git a/test/test_mutex.cpp b/test/test_mutex.cpp index f8c48c0e..247b3f25 100644 --- a/test/test_mutex.cpp +++ b/test/test_mutex.cpp @@ -6,6 +6,7 @@ // // This test is based on the tests of Boost.Thread +#include #include #include #include diff --git a/test/test_mutex_mt.cpp b/test/test_mutex_mt.cpp index e749bebb..cf1ba564 100644 --- a/test/test_mutex_mt.cpp +++ b/test/test_mutex_mt.cpp @@ -6,6 +6,7 @@ // // This test is based on the tests of Boost.Thread +#include #include #include #include