diff -ur src/sync/emulation/interprocess_condition.hpp dst/sync/emulation/interprocess_condition.hpp --- src/sync/emulation/interprocess_condition.hpp 2007-05-04 16:53:10.000000000 -0400 +++ dst/sync/emulation/interprocess_condition.hpp 2007-05-14 14:57:42.000000000 -0400 @@ -65,20 +65,23 @@ //The enter interprocess_mutex will rest locked until the last waiting thread unlocks it } -inline void interprocess_condition::do_wait(interprocess_mutex &mut) +template +inline void interprocess_condition::do_wait(M &mut) { this->do_timed_wait(false, boost::posix_time::ptime(), mut); } +template inline bool interprocess_condition::do_timed_wait - (const boost::posix_time::ptime &abs_time, interprocess_mutex &mut) + (const boost::posix_time::ptime &abs_time, M &mut) { return this->do_timed_wait(true, abs_time, mut); } +template inline bool interprocess_condition::do_timed_wait(bool tout_enabled, const boost::posix_time::ptime &abs_time, - interprocess_mutex &mut) + M &mut) { boost::posix_time::ptime now = boost::posix_time::microsec_clock::universal_time(); diff -ur src/sync/interprocess_condition.hpp dst/sync/interprocess_condition.hpp --- src/sync/interprocess_condition.hpp 2007-05-04 16:53:09.000000000 -0400 +++ dst/sync/interprocess_condition.hpp 2007-05-14 14:55:59.000000000 -0400 @@ -129,9 +129,11 @@ /// @cond private: - void do_wait(interprocess_mutex &mut); + template + void do_wait(M &mut); - bool do_timed_wait(const boost::posix_time::ptime &abs_time, interprocess_mutex &mut); + template + bool do_timed_wait(const boost::posix_time::ptime &abs_time, M &mut); #if defined (BOOST_INTERPROCESS_USE_GENERIC_EMULATION) enum { SLEEP = 0, NOTIFY_ONE, NOTIFY_ALL }; diff -ur src/sync/interprocess_recursive_mutex.hpp dst/sync/interprocess_recursive_mutex.hpp --- src/sync/interprocess_recursive_mutex.hpp 2007-05-04 16:53:09.000000000 -0400 +++ dst/sync/interprocess_recursive_mutex.hpp 2007-05-14 12:32:09.000000000 -0400 @@ -66,6 +66,7 @@ //Non-copyable interprocess_recursive_mutex(const interprocess_recursive_mutex &); interprocess_recursive_mutex &operator=(const interprocess_recursive_mutex &); + friend class interprocess_condition; /// @endcond public: /*!Constructor. Throws interprocess_exception on error.*/ diff -ur src/sync/posix/interprocess_condition.hpp dst/sync/posix/interprocess_condition.hpp --- src/sync/posix/interprocess_condition.hpp 2007-05-04 16:53:10.000000000 -0400 +++ dst/sync/posix/interprocess_condition.hpp 2007-05-14 14:58:45.000000000 -0400 @@ -56,7 +56,8 @@ assert(res == 0); } -inline void interprocess_condition::do_wait(interprocess_mutex &mut) +template +inline void interprocess_condition::do_wait(M &mut) { pthread_mutex_t* pmutex = &mut.m_mut; int res = 0; @@ -64,8 +65,9 @@ assert(res == 0); } +template inline bool interprocess_condition::do_timed_wait - (const boost::posix_time::ptime &abs_time, interprocess_mutex &mut) + (const boost::posix_time::ptime &abs_time, M &mut) { timespec ts = detail::ptime_to_timespec(abs_time); pthread_mutex_t* pmutex = &mut.m_mut;