Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r81763 - in branches/release: boost/thread boost/thread/detail boost/thread/pthread boost/thread/win32 libs/thread libs/thread/build libs/thread/example libs/thread/src/pthread libs/thread/src/win32 libs/thread/test libs/thread/test/sync/conditions/condition_variable
From: vicente.botet_at_[hidden]
Date: 2012-12-07 12:10:09


Author: viboes
Date: 2012-12-07 12:10:06 EST (Fri, 07 Dec 2012)
New Revision: 81763
URL: http://svn.boost.org/trac/boost/changeset/81763

Log:
Thread: merge from trunk noit, default to version 3, synchronized_value move semantics
Added:
   branches/release/libs/thread/test/sync/conditions/condition_variable/wait_pass.cpp
      - copied unchanged from r81704, /trunk/libs/thread/test/sync/conditions/condition_variable/wait_pass.cpp
Properties modified:
   branches/release/boost/thread/ (props changed)
   branches/release/libs/thread/ (props changed)
Text files modified:
   branches/release/boost/thread/detail/config.hpp | 4
   branches/release/boost/thread/future.hpp | 18
   branches/release/boost/thread/pthread/condition_variable.hpp | 8
   branches/release/boost/thread/pthread/condition_variable_fwd.hpp | 11
   branches/release/boost/thread/pthread/thread_data.hpp | 22 +
   branches/release/boost/thread/strict_lock.hpp | 4
   branches/release/boost/thread/synchronized_value.hpp | 211 ++++++++++++++++-
   branches/release/boost/thread/thread_functors.hpp | 3
   branches/release/boost/thread/win32/thread_data.hpp | 23 -
   branches/release/libs/thread/build/Jamfile.v2 | 2
   branches/release/libs/thread/example/synchronized_person.cpp | 28 -
   branches/release/libs/thread/example/synchronized_value.cpp | 42 +--
   branches/release/libs/thread/example/thread_group.cpp | 2
   branches/release/libs/thread/src/pthread/once.cpp | 1
   branches/release/libs/thread/src/pthread/thread.cpp | 14
   branches/release/libs/thread/src/win32/thread.cpp | 2
   branches/release/libs/thread/test/Jamfile.v2 | 452 ++++++++++++++++++++-------------------
   17 files changed, 527 insertions(+), 320 deletions(-)

Modified: branches/release/boost/thread/detail/config.hpp
==============================================================================
--- branches/release/boost/thread/detail/config.hpp (original)
+++ branches/release/boost/thread/detail/config.hpp 2012-12-07 12:10:06 EST (Fri, 07 Dec 2012)
@@ -78,9 +78,9 @@
 #define BOOST_THREAD_RVALUE_REFERENCES_DONT_MATCH_FUNTION_PTR
 #endif
 
-// Default version is 2
+// Default version is 3
 #if !defined BOOST_THREAD_VERSION
-#define BOOST_THREAD_VERSION 2
+#define BOOST_THREAD_VERSION 3
 #else
 #if BOOST_THREAD_VERSION!=2 && BOOST_THREAD_VERSION!=3 && BOOST_THREAD_VERSION!=4
 #error "BOOST_THREAD_VERSION must be 2, 3 or 4"

Modified: branches/release/boost/thread/future.hpp
==============================================================================
--- branches/release/boost/thread/future.hpp (original)
+++ branches/release/boost/thread/future.hpp 2012-12-07 12:10:06 EST (Fri, 07 Dec 2012)
@@ -267,28 +267,30 @@
             bool is_deferred_;
             launch policy_;
             bool is_constructed;
-#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
- bool thread_was_interrupted;
-#endif
             boost::mutex mutex;
             boost::condition_variable waiters;
             typedef std::list<boost::condition_variable_any*> waiter_list;
             waiter_list external_waiters;
             boost::function<void()> callback;
+//#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+ bool thread_was_interrupted;
+//#endif
 #if defined BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
             shared_ptr<future_continuation_base> continuation_ptr;
+#else
+ shared_ptr<void> continuation_ptr;
 #endif
             future_object_base():
                 done(false),
                 is_deferred_(false),
                 policy_(launch::any),
                 is_constructed(false)
-#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
- , thread_was_interrupted(false)
-#endif
-#if defined BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
+//#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+ , thread_was_interrupted(false)
+//#endif
+//#if defined BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
                , continuation_ptr()
-#endif
+//#endif
             {}
             virtual ~future_object_base()
             {}

Modified: branches/release/boost/thread/pthread/condition_variable.hpp
==============================================================================
--- branches/release/boost/thread/pthread/condition_variable.hpp (original)
+++ branches/release/boost/thread/pthread/condition_variable.hpp 2012-12-07 12:10:06 EST (Fri, 07 Dec 2012)
@@ -62,6 +62,8 @@
             thread_cv_detail::lock_on_exit<unique_lock<mutex> > guard;
 #if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
             detail::interruption_checker check_for_interruption(&internal_mutex,&cond);
+#else
+ boost::pthread::pthread_mutex_scoped_lock check_for_interruption(&internal_mutex);
 #endif
             guard.activate(m);
             do {
@@ -91,6 +93,8 @@
         {
 #if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
             detail::interruption_checker check_for_interruption(&internal_mutex,&cond);
+#else
+ boost::pthread::pthread_mutex_scoped_lock check_for_interruption(&internal_mutex);
 #endif
             guard.activate(m);
             cond_res=pthread_cond_timedwait(&cond,&internal_mutex,&timeout);
@@ -156,6 +160,8 @@
                 thread_cv_detail::lock_on_exit<lock_type> guard;
 #if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
                 detail::interruption_checker check_for_interruption(&internal_mutex,&cond);
+#else
+ boost::pthread::pthread_mutex_scoped_lock check_for_interruption(&internal_mutex);
 #endif
                 guard.activate(m);
                 res=pthread_cond_wait(&cond,&internal_mutex);
@@ -328,6 +334,8 @@
               thread_cv_detail::lock_on_exit<lock_type> guard;
 #if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
               detail::interruption_checker check_for_interruption(&internal_mutex,&cond);
+#else
+ boost::pthread::pthread_mutex_scoped_lock check_for_interruption(&internal_mutex);
 #endif
               guard.activate(m);
               res=pthread_cond_timedwait(&cond,&internal_mutex,&timeout);

Modified: branches/release/boost/thread/pthread/condition_variable_fwd.hpp
==============================================================================
--- branches/release/boost/thread/pthread/condition_variable_fwd.hpp (original)
+++ branches/release/boost/thread/pthread/condition_variable_fwd.hpp 2012-12-07 12:10:06 EST (Fri, 07 Dec 2012)
@@ -14,13 +14,16 @@
 #include <boost/thread/lock_types.hpp>
 #include <boost/thread/thread_time.hpp>
 #include <boost/thread/pthread/timespec.hpp>
+#if defined BOOST_THREAD_USES_DATETIME
 #include <boost/thread/xtime.hpp>
+#endif
 #ifdef BOOST_THREAD_USES_CHRONO
 #include <boost/chrono/system_clocks.hpp>
 #include <boost/chrono/ceil.hpp>
 #endif
 #include <boost/thread/detail/delete.hpp>
 #include <boost/date_time/posix_time/posix_time_duration.hpp>
+
 #include <boost/config/abi_prefix.hpp>
 
 namespace boost
@@ -64,12 +67,15 @@
         }
         ~condition_variable()
         {
- BOOST_VERIFY(!pthread_mutex_destroy(&internal_mutex));
             int ret;
             do {
+ ret = pthread_mutex_destroy(&internal_mutex);
+ } while (ret == EINTR);
+ BOOST_ASSERT(!ret);
+ do {
               ret = pthread_cond_destroy(&cond);
             } while (ret == EINTR);
- BOOST_VERIFY(!ret);
+ BOOST_ASSERT(!ret);
         }
 
         void wait(unique_lock<mutex>& m);
@@ -241,6 +247,7 @@
     };
 
     BOOST_THREAD_DECL void notify_all_at_thread_exit(condition_variable& cond, unique_lock<mutex> lk);
+
 }
 
 

Modified: branches/release/boost/thread/pthread/thread_data.hpp
==============================================================================
--- branches/release/boost/thread/pthread/thread_data.hpp (original)
+++ branches/release/boost/thread/pthread/thread_data.hpp 2012-12-07 12:10:06 EST (Fri, 07 Dec 2012)
@@ -113,10 +113,7 @@
             bool joined;
             boost::detail::thread_exit_callback_node* thread_exit_callbacks;
             std::map<void const*,boost::detail::tss_data_node> tss_data;
-#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
- bool interrupt_enabled;
- bool interrupt_requested;
-#endif
+
             pthread_mutex_t* cond_mutex;
             pthread_cond_t* current_cond;
             typedef std::vector<std::pair<condition_variable*, mutex*>
@@ -127,16 +124,23 @@
             typedef std::vector<shared_ptr<future_object_base> > async_states_t;
             async_states_t async_states_;
 
+//#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+ // These data must be at the end so that the access to the other fields doesn't change
+ // when BOOST_THREAD_PROVIDES_INTERRUPTIONS is defined.
+ // Another option is to have them always
+ bool interrupt_enabled;
+ bool interrupt_requested;
+//#endif
             thread_data_base():
                 done(false),join_started(false),joined(false),
                 thread_exit_callbacks(0),
-#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
- interrupt_enabled(true),
- interrupt_requested(false),
-#endif
                 current_cond(0),
                 notify(),
                 async_states_()
+//#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+ , interrupt_enabled(true)
+ , interrupt_requested(false)
+//#endif
             {}
             virtual ~thread_data_base();
 
@@ -209,8 +213,8 @@
                 }
             }
         };
- }
 #endif
+ }
 
     namespace this_thread
     {

Modified: branches/release/boost/thread/strict_lock.hpp
==============================================================================
--- branches/release/boost/thread/strict_lock.hpp (original)
+++ branches/release/boost/thread/strict_lock.hpp 2012-12-07 12:10:06 EST (Fri, 07 Dec 2012)
@@ -8,7 +8,7 @@
 
 #include <boost/thread/detail/delete.hpp>
 #include <boost/thread/lock_options.hpp>
-#include <boost/thread/is_locked_by_this_thread.hpp>
+//#include <boost/thread/is_locked_by_this_thread.hpp>
 #include <boost/thread/lock_traits.hpp>
 #include <boost/thread/lockable_traits.hpp>
 #include <boost/thread/lockable_concepts.hpp>
@@ -74,7 +74,7 @@
   public:
 
     /**
- * @return whether if this lock is locking that mutex.
+ * @return whether this lock is locking that mutex.
      */
     bool owns_lock(mutex_type const* l) const BOOST_NOEXCEPT
     {

Modified: branches/release/boost/thread/synchronized_value.hpp
==============================================================================
--- branches/release/boost/thread/synchronized_value.hpp (original)
+++ branches/release/boost/thread/synchronized_value.hpp 2012-12-07 12:10:06 EST (Fri, 07 Dec 2012)
@@ -9,11 +9,15 @@
 #define BOOST_THREAD_SYNCHRONIZED_VALUE_HPP
 
 #include <boost/thread/detail/config.hpp>
-#if ! defined BOOST_NO_CXX11_RVALUE_REFERENCES
 
+#include <boost/thread/detail/move.hpp>
 #include <boost/thread/mutex.hpp>
 #include <boost/thread/lock_types.hpp>
 #include <boost/thread/lock_guard.hpp>
+#include <boost/thread/lock_algorithms.hpp>
+#include <boost/thread/lock_factories.hpp>
+#include <boost/thread/strict_lock.hpp>
+#include <boost/utility/swap.hpp>
 
 #include <boost/config/abi_prefix.hpp>
 
@@ -32,17 +36,152 @@
     T value_;
     mutable lockable_type mtx_;
   public:
+ /**
+ * Default constructor.
+ *
+ * Requires: T is DefaultConstructible
+ */
     synchronized_value()
     : value_()
     {
     }
 
- synchronized_value(T other)
+ /**
+ * Constructor from copy constructible value.
+ *
+ * Requires: T is CopyConstructible
+ */
+ synchronized_value(T const& other)
     : value_(other)
     {
     }
 
     /**
+ * Move Constructor from movable value.
+ *
+ * Requires: T is CopyConstructible
+ */
+ synchronized_value(BOOST_THREAD_RV_REF(T) other)
+ : value_(boost::move(other))
+ {
+ }
+
+ /**
+ * Copy Constructor.
+ *
+ * Requires: T is DefaultConstructible and Assignable
+ * Effects: Assigns the value on a scope protected by the mutex of the rhs. The mutex is not copied.
+ */
+ synchronized_value(synchronized_value const& rhs)
+ {
+ strict_lock<lockable_type> lk(rhs.mtx_);
+ value_ = rhs.value_;
+ }
+
+ /**
+ * Move Constructor.
+ *
+ */
+ synchronized_value(BOOST_THREAD_RV_REF(synchronized_value) other)
+ {
+ strict_lock<lockable_type> lk(other.mtx_);
+ value_= boost::move(other);
+ }
+
+ /**
+ * Assignment operator.
+ *
+ * Effects: Copies the underlying value on a scope protected by the two mutexes.
+ * The mutexes are not copied. The locks are acquired using lock, so deadlock is avoided.
+ * For example, there is no problem if one thread assigns a = b and the other assigns b = a.
+ *
+ * Return: *this
+ */
+
+ synchronized_value& operator=(synchronized_value const& rhs)
+ {
+ if(&rhs != this)
+ {
+ // auto _ = make_unique_locks(mtx_, rhs.mtx_);
+ unique_lock<lockable_type> lk1(mtx_, defer_lock);
+ unique_lock<lockable_type> lk2(rhs.mtx_, defer_lock);
+ lock(lk1,lk2);
+
+ value_ = rhs.value_;
+ }
+ return *this;
+ }
+ /**
+ * Assignment operator from a T const&.
+ * Effects: The operator copies the value on a scope protected by the mutex.
+ * Return: *this
+ */
+ synchronized_value& operator=(value_type const& value)
+ {
+ {
+ strict_lock<lockable_type> lk(mtx_);
+ value_ = value;
+ }
+ return *this;
+ }
+
+ /**
+ * Explicit conversion to value type.
+ *
+ * Requires: T is CopyConstructible
+ * Return: A copy of the protected value obtained on a scope protected by the mutex.
+ *
+ */
+ T get() const
+ {
+ strict_lock<lockable_type> lk(mtx_);
+ return value_;
+ }
+ /**
+ * Explicit conversion to value type.
+ *
+ * Requires: T is CopyConstructible
+ * Return: A copy of the protected value obtained on a scope protected by the mutex.
+ *
+ */
+#if ! defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS)
+ explicit operator T() const
+ {
+ return get();
+ }
+#endif
+
+ /**
+ * Swap
+ *
+ * Effects: Swaps the data. Again, locks are acquired using lock(). The mutexes are not swapped.
+ * A swap method accepts a T& and swaps the data inside a critical section.
+ * This is by far the preferred method of changing the guarded datum wholesale because it keeps the lock only
+ * for a short time, thus lowering the pressure on the mutex.
+ */
+ void swap(synchronized_value & rhs)
+ {
+ if (this == &rhs) {
+ return;
+ }
+ // auto _ = make_unique_locks(mtx_, rhs.mtx_);
+ unique_lock<lockable_type> lk1(mtx_, defer_lock);
+ unique_lock<lockable_type> lk2(rhs.mtx_, defer_lock);
+ lock(lk1,lk2);
+ boost::swap(value_, rhs.value_);
+ }
+ /**
+ * Swap with the underlying type
+ *
+ * Effects: Swaps the data on a scope protected by the mutex.
+ */
+ void swap(value_type & rhs)
+ {
+ strict_lock<lockable_type> lk(mtx_);
+ boost::swap(value_, rhs.value_);
+ }
+
+ /**
      *
      */
     struct const_strict_synchronizer
@@ -50,6 +189,7 @@
     protected:
       friend class synchronized_value;
 
+ // this should be a strict_lock, but we need to be able to return it.
       boost::unique_lock<lockable_type> lk_;
       T const& value_;
 
@@ -58,10 +198,10 @@
       {
       }
     public:
- BOOST_THREAD_NO_COPYABLE( const_strict_synchronizer )
+ BOOST_THREAD_MOVABLE_ONLY( const_strict_synchronizer )
 
- const_strict_synchronizer(const_strict_synchronizer&& other)
- : lk_(boost::move(other.lk_)),value_(other.value_)
+ const_strict_synchronizer(BOOST_THREAD_RV_REF(const_strict_synchronizer) other)
+ : lk_(boost::move(BOOST_THREAD_RV(other).lk_)),value_(BOOST_THREAD_RV(other).value_)
       {
       }
 
@@ -94,10 +234,10 @@
       {
       }
     public:
- BOOST_THREAD_NO_COPYABLE( strict_synchronizer )
+ BOOST_THREAD_MOVABLE_ONLY( strict_synchronizer )
 
- strict_synchronizer(strict_synchronizer&& other)
- : const_strict_synchronizer(boost::move(other))
+ strict_synchronizer(BOOST_THREAD_RV_REF(strict_synchronizer) other)
+ : const_strict_synchronizer(boost::move(static_cast<const_strict_synchronizer&>(other)))
       {
       }
 
@@ -118,15 +258,36 @@
     };
 
 
+ /**
+ * Essentially calling a method obj->foo(x, y, z) calls the method foo(x, y, z) inside a critical section as
+ * long-lived as the call itself.
+ */
     strict_synchronizer operator->()
     {
       return BOOST_THREAD_MAKE_RV_REF(strict_synchronizer(*this));
     }
+ /**
+ * If the synchronized_value object involved is const-qualified, then you'll only be able to call const methods
+ * through operator->. So, for example, vec->push_back("xyz") won't work if vec were const-qualified.
+ * The locking mechanism capitalizes on the assumption that const methods don't modify their underlying data.
+ */
     const_strict_synchronizer operator->() const
     {
       return BOOST_THREAD_MAKE_RV_REF(const_strict_synchronizer(*this));
     }
 
+ /**
+ * The synchronize() factory make easier to lock on a scope.
+ * As discussed, operator-> can only lock over the duration of a call, so it is insufficient for complex operations.
+ * With synchronize() you get to lock the object in a scoped and to directly access the object inside that scope.
+ *
+ * Example
+ * void fun(synchronized_value<vector<int>> & vec) {
+ * auto&& vec=vec.synchronize();
+ * vec.push_back(42);
+ * assert(vec.back() == 42);
+ * }
+ */
     strict_synchronizer synchronize()
     {
       return BOOST_THREAD_MAKE_RV_REF(strict_synchronizer(*this));
@@ -147,15 +308,15 @@
 
       T& value_;
 
+ public:
+ BOOST_THREAD_MOVABLE_ONLY(unique_synchronizer)
+
       explicit unique_synchronizer(synchronized_value& outer)
       : base_type(outer.mtx_), value_(outer.value_)
       {
       }
- public:
- BOOST_THREAD_NO_COPYABLE(unique_synchronizer)
-
- unique_synchronizer(unique_synchronizer&& other):
- base_type(static_cast<base_type&&>(other)),value_(other.value_)
+ unique_synchronizer(BOOST_THREAD_RV_REF(unique_synchronizer) other)
+ : base_type(boost::move(other)),value_(BOOST_THREAD_RV(other).value_)
       {
       }
 
@@ -207,9 +368,10 @@
       {}
 
     public:
- BOOST_THREAD_NO_COPYABLE(deref_value)
- deref_value(deref_value&& other):
- lk_(boost::move(other.lk_)),value_(other.value_)
+ BOOST_THREAD_MOVABLE_ONLY(deref_value)
+
+ deref_value(BOOST_THREAD_RV_REF(deref_value) other):
+ lk_(boost::move(BOOST_THREAD_RV(other).lk_)),value_(BOOST_THREAD_RV(other).value_)
       {}
       operator T()
       {
@@ -235,9 +397,10 @@
       {}
 
     public:
- BOOST_THREAD_NO_COPYABLE(const_deref_value)
- const_deref_value(const_deref_value&& other):
- lk_(boost::move(other.lk_)), value_(other.value_)
+ BOOST_THREAD_MOVABLE_ONLY(const_deref_value)
+
+ const_deref_value(BOOST_THREAD_RV_REF(const_deref_value) other):
+ lk_(boost::move(BOOST_THREAD_RV(other).lk_)), value_(BOOST_THREAD_RV(other).value_)
       {}
 
       operator T()
@@ -259,9 +422,17 @@
 
   };
 
+ /**
+ *
+ */
+ template <typename T, typename L>
+ inline void swap(synchronized_value<T,L> & lhs, synchronized_value<T,L> & rhs)
+ {
+ lhs.swap(rhs);
+ }
+
 }
 
 #include <boost/config/abi_suffix.hpp>
 
-#endif // BOOST_NO_CXX11_RVALUE_REFERENCES
 #endif // header

Modified: branches/release/boost/thread/thread_functors.hpp
==============================================================================
--- branches/release/boost/thread/thread_functors.hpp (original)
+++ branches/release/boost/thread/thread_functors.hpp 2012-12-07 12:10:06 EST (Fri, 07 Dec 2012)
@@ -38,6 +38,7 @@
     }
   };
 
+#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
   struct interrupt_and_join_if_joinable
   {
     void operator()(thread& t)
@@ -49,7 +50,7 @@
       }
     }
   };
-
+#endif
 }
 #include <boost/config/abi_suffix.hpp>
 

Modified: branches/release/boost/thread/win32/thread_data.hpp
==============================================================================
--- branches/release/boost/thread/win32/thread_data.hpp (original)
+++ branches/release/boost/thread/win32/thread_data.hpp 2012-12-07 12:10:06 EST (Fri, 07 Dec 2012)
@@ -94,14 +94,8 @@
         {
             long count;
             detail::win32::handle_manager thread_handle;
-#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
- detail::win32::handle_manager interruption_handle;
-#endif
             boost::detail::thread_exit_callback_node* thread_exit_callbacks;
             std::map<void const*,boost::detail::tss_data_node> tss_data;
-#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
- bool interruption_enabled;
-#endif
             unsigned id;
             typedef std::vector<std::pair<condition_variable*, mutex*>
             //, hidden_allocator<std::pair<condition_variable*, mutex*> >
@@ -110,19 +104,24 @@
 
             typedef std::vector<shared_ptr<future_object_base> > async_states_t;
             async_states_t async_states_;
+//#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+ // These data must be at the end so that the access to the other fields doesn't change
+ // when BOOST_THREAD_PROVIDES_INTERRUPTIONS is defined
+ // Another option is to have them always
+ detail::win32::handle_manager interruption_handle;
+ bool interruption_enabled;
+//#endif
 
             thread_data_base():
                 count(0),thread_handle(detail::win32::invalid_handle_value),
-#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
- interruption_handle(create_anonymous_event(detail::win32::manual_reset_event,detail::win32::event_initially_reset)),
-#endif
                 thread_exit_callbacks(0),tss_data(),
-#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
- interruption_enabled(true),
-#endif
                 id(0),
                 notify(),
                 async_states_()
+//#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+ , interruption_handle(create_anonymous_event(detail::win32::manual_reset_event,detail::win32::event_initially_reset))
+ , interruption_enabled(true)
+//#endif
             {}
             virtual ~thread_data_base();
 

Modified: branches/release/libs/thread/build/Jamfile.v2
==============================================================================
--- branches/release/libs/thread/build/Jamfile.v2 (original)
+++ branches/release/libs/thread/build/Jamfile.v2 2012-12-07 12:10:06 EST (Fri, 07 Dec 2012)
@@ -49,6 +49,8 @@
       <toolset>gcc:<cxxflags>-Wno-long-long
       <define>BOOST_THREAD_THROW_IF_PRECONDITION_NOT_SATISFIED
       <define>BOOST_SYSTEM_NO_DEPRECATED
+ #<define>BOOST_THREAD_DONT_PROVIDE_INTERRUPTIONS
+
       <library>/boost/system//boost_system
        #-pedantic -ansi -std=gnu++0x -Wextra -fpermissive
         <warnings>all

Modified: branches/release/libs/thread/example/synchronized_person.cpp
==============================================================================
--- branches/release/libs/thread/example/synchronized_person.cpp (original)
+++ branches/release/libs/thread/example/synchronized_person.cpp 2012-12-07 12:10:06 EST (Fri, 07 Dec 2012)
@@ -3,18 +3,12 @@
 // Distributed under the Boost Software License, Version 1.0. (See accompanying
 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 
-//#define BOOST_THREAD_VERSION 4
-
-// There is yet a limitation when BOOST_THREAD_PROVIDES_FUTURE_INVALID_AFTER_GET is defined
-#define BOOST_THREAD_DONT_PROVIDE_FUTURE_INVALID_AFTER_GET
+#define BOOST_THREAD_VERSION 4
 
 #include <iostream>
 #include <string>
 #include <boost/thread/synchronized_value.hpp>
 
-#if ! defined BOOST_NO_CXX11_RVALUE_REFERENCES && ! defined BOOST_NO_CXX11_AUTO
-
-
 //class SafePerson {
 //public:
 // std::string GetName() const {
@@ -161,12 +155,20 @@
     member(age)
   { }
   std::string GetName() const {
- auto&& memberSync = member.synchronize();
+#if ! defined BOOST_NO_CXX11_AUTO_DECLARATIONS
+ auto memberSync = member.synchronize();
+#else
+ boost::synchronized_value<Member>::const_strict_synchronizer memberSync = member.synchronize();
+#endif
     Invariant(memberSync);
     return memberSync->name;
   }
   void SetName(const std::string& newName) {
- auto&& memberSync = member.synchronize();
+#if ! defined BOOST_NO_CXX11_AUTO_DECLARATIONS
+ auto memberSync = member.synchronize();
+#else
+ boost::synchronized_value<Member>::strict_synchronizer memberSync = member.synchronize();
+#endif
     Invariant(memberSync);
     memberSync->name = newName;
   }
@@ -236,11 +238,3 @@
   }
   return 0;
 }
-
-#else
-
-int main()
-{
- return 0;
-}
-#endif

Modified: branches/release/libs/thread/example/synchronized_value.cpp
==============================================================================
--- branches/release/libs/thread/example/synchronized_value.cpp (original)
+++ branches/release/libs/thread/example/synchronized_value.cpp 2012-12-07 12:10:06 EST (Fri, 07 Dec 2012)
@@ -4,17 +4,12 @@
 // Distributed under the Boost Software License, Version 1.0. (See accompanying
 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 
-//#define BOOST_THREAD_VERSION 4
-
-// There is yet a limitation when BOOST_THREAD_PROVIDES_FUTURE_INVALID_AFTER_GET is defined
-#define BOOST_THREAD_DONT_PROVIDE_FUTURE_INVALID_AFTER_GET
+#define BOOST_THREAD_VERSION 4
 
 #include <iostream>
 #include <string>
 #include <boost/thread/synchronized_value.hpp>
 
-#if ! defined BOOST_NO_CXX11_RVALUE_REFERENCES
-
 void addTrailingSlashIfMissing(boost::synchronized_value<std::string> & path)
 {
   boost::synchronized_value<std::string>::strict_synchronizer u=path.synchronize();
@@ -57,6 +52,21 @@
       std::cout<<"v1="<<*u<<std::endl;
       g(u);
     }
+ boost::synchronized_value<int> v2(2);
+ std::cout<<"v2="<<*v2<<std::endl;
+ v2 = 3;
+ std::cout<<"v2="<<*v2<<std::endl;
+
+ boost::synchronized_value<int> v3(v2);
+ std::cout<<"v3="<<*v3<<std::endl;
+ v3 = v1;
+ std::cout<<"v3="<<*v3<<std::endl;
+
+ std::cout<<"v2="<<*v3<<std::endl;
+ std::cout<<"v3="<<*v3<<std::endl;
+ swap(v3,v2);
+ v1.swap(v2);
+ std::cout<<"v3="<<*v3<<std::endl;
   }
   {
     boost::synchronized_value<std::string> s;
@@ -65,31 +75,11 @@
   }
   {
     boost::synchronized_value<std::string> s;
-#if 1
     s->append("foo/");
-#else
     s.synchronize()->append("foo");
-#endif
- addTrailingSlashIfMissing(s);
- std::cout<<"s="<<std::string(*s)<<std::endl;
- }
- {
- boost::synchronized_value<std::string> s;
-#if 1
- s->append("foo");
-#else
- s.synchronize()->append("foo");
-#endif
     addTrailingSlashIfMissing(s);
     std::cout<<"s="<<std::string(*s)<<std::endl;
   }
   return 0;
 }
 
-#else
-
-int main()
-{
- return 0;
-}
-#endif

Modified: branches/release/libs/thread/example/thread_group.cpp
==============================================================================
--- branches/release/libs/thread/example/thread_group.cpp (original)
+++ branches/release/libs/thread/example/thread_group.cpp 2012-12-07 12:10:06 EST (Fri, 07 Dec 2012)
@@ -35,6 +35,7 @@
         threads.create_thread(&increment_count);
     threads.join_all();
   }
+#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
   {
     boost::thread_group threads;
     for (int i = 0; i < 3; ++i)
@@ -42,6 +43,7 @@
     threads.interrupt_all();
     threads.join_all();
   }
+#endif
   {
     boost::thread_group threads;
     boost::thread* th = new boost::thread(&increment_count);

Modified: branches/release/libs/thread/src/pthread/once.cpp
==============================================================================
--- branches/release/libs/thread/src/pthread/once.cpp (original)
+++ branches/release/libs/thread/src/pthread/once.cpp 2012-12-07 12:10:06 EST (Fri, 07 Dec 2012)
@@ -4,6 +4,7 @@
 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 
 #define __STDC_CONSTANT_MACROS
+#include <boost/thread/pthread/pthread_mutex_scoped_lock.hpp>
 #include <boost/thread/once.hpp>
 #include <boost/assert.hpp>
 #include <pthread.h>

Modified: branches/release/libs/thread/src/pthread/thread.cpp
==============================================================================
--- branches/release/libs/thread/src/pthread/thread.cpp (original)
+++ branches/release/libs/thread/src/pthread/thread.cpp 2012-12-07 12:10:06 EST (Fri, 07 Dec 2012)
@@ -6,7 +6,7 @@
 // Distributed under the Boost Software License, Version 1.0. (See accompanying
 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 
-#define BOOST_THREAD_VERSION 2
+#define BOOST_THREAD_VERSION 3
 #include <boost/thread/detail/config.hpp>
 
 #include <boost/thread/thread.hpp>
@@ -501,12 +501,17 @@
             BOOST_VERIFY(!sched_yield());
 # elif defined(BOOST_HAS_PTHREAD_YIELD)
             BOOST_VERIFY(!pthread_yield());
-# elif defined BOOST_THREAD_USES_DATETIME
+//# elif defined BOOST_THREAD_USES_DATETIME
 // xtime xt;
 // xtime_get(&xt, TIME_UTC_);
 // sleep(xt);
-//# else
- sleep_for(chrono::milliseconds(0));
+// sleep_for(chrono::milliseconds(0));
+# else
+#error
+ timespec ts;
+ ts.tv_sec= 0;
+ ts.tv_nsec= 0;
+ hiden::sleep_for(ts);
 # endif
         }
     }
@@ -723,6 +728,7 @@
             }
         }
     }
+
     BOOST_THREAD_DECL void notify_all_at_thread_exit(condition_variable& cond, unique_lock<mutex> lk)
     {
       detail::thread_data_base* const current_thread_data(detail::get_current_thread_data());

Modified: branches/release/libs/thread/src/win32/thread.cpp
==============================================================================
--- branches/release/libs/thread/src/win32/thread.cpp (original)
+++ branches/release/libs/thread/src/win32/thread.cpp 2012-12-07 12:10:06 EST (Fri, 07 Dec 2012)
@@ -12,7 +12,7 @@
 #ifndef WINVER
 #define WINVER 0x400
 #endif
-#define BOOST_THREAD_VERSION 2
+#define BOOST_THREAD_VERSION 3
 
 #include <boost/thread/thread.hpp>
 #include <boost/thread/once.hpp>

Modified: branches/release/libs/thread/test/Jamfile.v2
==============================================================================
--- branches/release/libs/thread/test/Jamfile.v2 (original)
+++ branches/release/libs/thread/test/Jamfile.v2 2012-12-07 12:10:06 EST (Fri, 07 Dec 2012)
@@ -118,6 +118,20 @@
     ;
 }
 
+rule thread-run2-noit ( sources : name )
+{
+ return
+ [ run $(sources) ../build//boost_thread : : :
+ : $(name) ]
+ [ run $(sources) ../src/tss_null.cpp ../build//boost_thread/<link>static
+ : : :
+ : $(name)_lib ]
+ [ run $(sources) ../build//boost_thread : : :
+ <define>BOOST_THREAD_DONT_PROVIDE_INTERRUPTIONS
+ : $(name)_noit ]
+ ;
+}
+
 rule thread-run2-h ( sources : name )
 {
     return
@@ -237,30 +251,31 @@
     :
           [ thread-compile-fail ./sync/conditions/condition_variable/assign_fail.cpp : : condition_variable__assign_f ]
           [ thread-compile-fail ./sync/conditions/condition_variable/copy_fail.cpp : : condition_variable__copy_f ]
- [ thread-run2 ./sync/conditions/condition_variable/default_pass.cpp : condition_variable__default_p ]
- [ thread-run2 ./sync/conditions/condition_variable/dtor_pass.cpp : condition_variable__dtor_p ]
- [ thread-run2 ./sync/conditions/condition_variable/native_handle_pass.cpp : condition_variable__native_handle_p ]
- [ thread-run2 ./sync/conditions/condition_variable/wait_for_pass.cpp : condition_variable__wait_for_p ]
- [ thread-run2 ./sync/conditions/condition_variable/wait_for_pred_pass.cpp : condition_variable__wait_for_pred_p ]
- [ thread-run2 ./sync/conditions/condition_variable/wait_until_pass.cpp : condition_variable__wait_until_p ]
- [ thread-run2 ./sync/conditions/condition_variable/wait_until_pred_pass.cpp : condition_variable__wait_until_pred_p ]
+ [ thread-run2-noit ./sync/conditions/condition_variable/default_pass.cpp : condition_variable__default_p ]
+ [ thread-run2-noit ./sync/conditions/condition_variable/dtor_pass.cpp : condition_variable__dtor_p ]
+ [ thread-run2-noit ./sync/conditions/condition_variable/native_handle_pass.cpp : condition_variable__native_handle_p ]
+ [ thread-run2-noit ./sync/conditions/condition_variable/wait_pass.cpp : condition_variable__wait_p ]
+ [ thread-run2-noit ./sync/conditions/condition_variable/wait_for_pass.cpp : condition_variable__wait_for_p ]
+ [ thread-run2-noit ./sync/conditions/condition_variable/wait_for_pred_pass.cpp : condition_variable__wait_for_pred_p ]
+ [ thread-run2-noit ./sync/conditions/condition_variable/wait_until_pass.cpp : condition_variable__wait_until_p ]
+ [ thread-run2-noit ./sync/conditions/condition_variable/wait_until_pred_pass.cpp : condition_variable__wait_until_pred_p ]
 
           [ thread-compile-fail ./sync/conditions/condition_variable_any/assign_fail.cpp : : condition_variable_any__assign_f ]
           [ thread-compile-fail ./sync/conditions/condition_variable_any/copy_fail.cpp : : condition_variable_any__copy_f ]
- [ thread-run2 ./sync/conditions/condition_variable_any/default_pass.cpp : condition_variable_any__default_p ]
- [ thread-run2 ./sync/conditions/condition_variable_any/dtor_pass.cpp : condition_variable_any__dtor_p ]
- [ thread-run2 ./sync/conditions/condition_variable_any/wait_for_pass.cpp : condition_variable_any__wait_for_p ]
- [ thread-run2 ./sync/conditions/condition_variable_any/wait_for_pred_pass.cpp : condition_variable_any__wait_for_pred_p ]
- [ thread-run2 ./sync/conditions/condition_variable_any/wait_until_pass.cpp : condition_variable_any__wait_until_p ]
- [ thread-run2 ./sync/conditions/condition_variable_any/wait_until_pred_pass.cpp : condition_variable_any__wait_until_pred_p ]
- [ thread-run2 ./sync/conditions/cv_status/cv_status_pass.cpp : cv_status__cv_status_p ]
- [ thread-run2 ./sync/conditions/notify_all_at_thread_exit_pass.cpp : notify_all_at_thread_exit_p ]
+ [ thread-run2-noit ./sync/conditions/condition_variable_any/default_pass.cpp : condition_variable_any__default_p ]
+ [ thread-run2-noit ./sync/conditions/condition_variable_any/dtor_pass.cpp : condition_variable_any__dtor_p ]
+ [ thread-run2-noit ./sync/conditions/condition_variable_any/wait_for_pass.cpp : condition_variable_any__wait_for_p ]
+ [ thread-run2-noit ./sync/conditions/condition_variable_any/wait_for_pred_pass.cpp : condition_variable_any__wait_for_pred_p ]
+ [ thread-run2-noit ./sync/conditions/condition_variable_any/wait_until_pass.cpp : condition_variable_any__wait_until_p ]
+ [ thread-run2-noit ./sync/conditions/condition_variable_any/wait_until_pred_pass.cpp : condition_variable_any__wait_until_pred_p ]
+ [ thread-run2-noit ./sync/conditions/cv_status/cv_status_pass.cpp : cv_status__cv_status_p ]
+ [ thread-run2-noit ./sync/conditions/notify_all_at_thread_exit_pass.cpp : notify_all_at_thread_exit_p ]
     ;
 
     #explicit ts_async ;
     test-suite ts_async
     :
- [ thread-run2 ./sync/futures/async/async_pass.cpp : async__async_p ]
+ [ thread-run2-noit ./sync/futures/async/async_pass.cpp : async__async_p ]
     ;
 
     #explicit ts_promise ;
@@ -268,23 +283,23 @@
     :
           [ thread-compile-fail ./sync/futures/promise/copy_assign_fail.cpp : : promise__copy_assign_f ]
           [ thread-compile-fail ./sync/futures/promise/copy_ctor_fail.cpp : : promise__copy_ctor_f ]
- [ thread-run2 ./sync/futures/promise/alloc_ctor_pass.cpp : promise__alloc_ctor_p ]
- [ thread-run2 ./sync/futures/promise/default_pass.cpp : promise__default_p ]
- [ thread-run2 ./sync/futures/promise/dtor_pass.cpp : promise__dtor_p ]
- [ thread-run2 ./sync/futures/promise/get_future_pass.cpp : promise__get_future_p ]
- [ thread-run2 ./sync/futures/promise/move_ctor_pass.cpp : promise__move_ctor_p ]
- [ thread-run2 ./sync/futures/promise/move_assign_pass.cpp : promise__move_asign_p ]
- [ thread-run2 ./sync/futures/promise/set_exception_pass.cpp : promise__set_exception_p ]
- [ thread-run2 ./sync/futures/promise/set_lvalue_pass.cpp : promise__set_lvalue_p ]
- [ thread-run2 ./sync/futures/promise/set_rvalue_pass.cpp : promise__set_rvalue_p ]
- [ thread-run2 ./sync/futures/promise/set_value_const_pass.cpp : promise__set_value_const_p ]
- [ thread-run2 ./sync/futures/promise/set_value_void_pass.cpp : promise__set_value_void_p ]
- [ thread-run2 ./sync/futures/promise/use_allocator_pass.cpp : promise__use_allocator_p ]
- [ thread-run2 ./sync/futures/promise/set_exception_at_thread_exit_pass.cpp : promise__set_exception_at_thread_exit_p ]
- [ thread-run2 ./sync/futures/promise/set_lvalue_at_thread_exit_pass.cpp : promise__set_lvalue_at_thread_exit_p ]
- [ thread-run2 ./sync/futures/promise/set_rvalue_at_thread_exit_pass.cpp : promise__set_rvalue_at_thread_exit_p ]
- [ thread-run2 ./sync/futures/promise/set_value_at_thread_exit_const_pass.cpp : promise__set_value_at_thread_exit_const_p ]
- [ thread-run2 ./sync/futures/promise/set_value_at_thread_exit_void_pass.cpp : promise__set_value_at_thread_exit_void_p ]
+ [ thread-run2-noit ./sync/futures/promise/alloc_ctor_pass.cpp : promise__alloc_ctor_p ]
+ [ thread-run2-noit ./sync/futures/promise/default_pass.cpp : promise__default_p ]
+ [ thread-run2-noit ./sync/futures/promise/dtor_pass.cpp : promise__dtor_p ]
+ [ thread-run2-noit ./sync/futures/promise/get_future_pass.cpp : promise__get_future_p ]
+ [ thread-run2-noit ./sync/futures/promise/move_ctor_pass.cpp : promise__move_ctor_p ]
+ [ thread-run2-noit ./sync/futures/promise/move_assign_pass.cpp : promise__move_asign_p ]
+ [ thread-run2-noit ./sync/futures/promise/set_exception_pass.cpp : promise__set_exception_p ]
+ [ thread-run2-noit ./sync/futures/promise/set_lvalue_pass.cpp : promise__set_lvalue_p ]
+ [ thread-run2-noit ./sync/futures/promise/set_rvalue_pass.cpp : promise__set_rvalue_p ]
+ [ thread-run2-noit ./sync/futures/promise/set_value_const_pass.cpp : promise__set_value_const_p ]
+ [ thread-run2-noit ./sync/futures/promise/set_value_void_pass.cpp : promise__set_value_void_p ]
+ [ thread-run2-noit ./sync/futures/promise/use_allocator_pass.cpp : promise__use_allocator_p ]
+ [ thread-run2-noit ./sync/futures/promise/set_exception_at_thread_exit_pass.cpp : promise__set_exception_at_thread_exit_p ]
+ [ thread-run2-noit ./sync/futures/promise/set_lvalue_at_thread_exit_pass.cpp : promise__set_lvalue_at_thread_exit_p ]
+ [ thread-run2-noit ./sync/futures/promise/set_rvalue_at_thread_exit_pass.cpp : promise__set_rvalue_at_thread_exit_p ]
+ [ thread-run2-noit ./sync/futures/promise/set_value_at_thread_exit_const_pass.cpp : promise__set_value_at_thread_exit_const_p ]
+ [ thread-run2-noit ./sync/futures/promise/set_value_at_thread_exit_void_pass.cpp : promise__set_value_at_thread_exit_void_p ]
     ;
 
     #explicit ts_future ;
@@ -292,46 +307,46 @@
     :
           [ thread-compile-fail ./sync/futures/future/copy_assign_fail.cpp : : future__copy_assign_f ]
           [ thread-compile-fail ./sync/futures/future/copy_ctor_fail.cpp : : future__copy_ctor_f ]
- [ thread-run2 ./sync/futures/future/default_pass.cpp : future__default_p ]
- [ thread-run2 ./sync/futures/future/dtor_pass.cpp : future__dtor_p ]
- [ thread-run2 ./sync/futures/future/get_pass.cpp : future__get_p ]
- [ thread-run2 ./sync/futures/future/move_ctor_pass.cpp : future__move_ctor_p ]
- [ thread-run2 ./sync/futures/future/move_assign_pass.cpp : future__move_asign_p ]
- [ thread-run2 ./sync/futures/future/share_pass.cpp : future__share_p ]
- [ thread-run2 ./sync/futures/future/then_pass.cpp : future__then_p ]
+ [ thread-run2-noit ./sync/futures/future/default_pass.cpp : future__default_p ]
+ [ thread-run2-noit ./sync/futures/future/dtor_pass.cpp : future__dtor_p ]
+ [ thread-run2-noit ./sync/futures/future/get_pass.cpp : future__get_p ]
+ [ thread-run2-noit ./sync/futures/future/move_ctor_pass.cpp : future__move_ctor_p ]
+ [ thread-run2-noit ./sync/futures/future/move_assign_pass.cpp : future__move_asign_p ]
+ [ thread-run2-noit ./sync/futures/future/share_pass.cpp : future__share_p ]
+ [ thread-run2-noit ./sync/futures/future/then_pass.cpp : future__then_p ]
     ;
 
     #explicit ts_shared_future ;
     test-suite ts_shared_future
     :
- [ thread-run2 ./sync/futures/shared_future/copy_assign_pass.cpp : shared_future__copy_assign_p ]
- [ thread-run2 ./sync/futures/shared_future/copy_ctor_pass.cpp : shared_future__copy_ctor_p ]
- [ thread-run2 ./sync/futures/shared_future/default_pass.cpp : shared_future__default_p ]
- [ thread-run2 ./sync/futures/shared_future/dtor_pass.cpp : shared_future__dtor_p ]
- [ thread-run2 ./sync/futures/shared_future/get_pass.cpp : shared_future__get_p ]
- [ thread-run2 ./sync/futures/shared_future/move_ctor_pass.cpp : shared_future__move_ctor_p ]
- [ thread-run2 ./sync/futures/shared_future/move_assign_pass.cpp : shared_future__move_asign_p ]
+ [ thread-run2-noit ./sync/futures/shared_future/copy_assign_pass.cpp : shared_future__copy_assign_p ]
+ [ thread-run2-noit ./sync/futures/shared_future/copy_ctor_pass.cpp : shared_future__copy_ctor_p ]
+ [ thread-run2-noit ./sync/futures/shared_future/default_pass.cpp : shared_future__default_p ]
+ [ thread-run2-noit ./sync/futures/shared_future/dtor_pass.cpp : shared_future__dtor_p ]
+ [ thread-run2-noit ./sync/futures/shared_future/get_pass.cpp : shared_future__get_p ]
+ [ thread-run2-noit ./sync/futures/shared_future/move_ctor_pass.cpp : shared_future__move_ctor_p ]
+ [ thread-run2-noit ./sync/futures/shared_future/move_assign_pass.cpp : shared_future__move_asign_p ]
     ;
 
     #explicit ts_packaged_task ;
     test-suite ts_packaged_task
     :
- [ thread-run2 ./sync/futures/packaged_task/alloc_ctor_pass.cpp : packaged_task__alloc_ctor_p ]
+ [ thread-run2-noit ./sync/futures/packaged_task/alloc_ctor_pass.cpp : packaged_task__alloc_ctor_p ]
           [ thread-compile-fail ./sync/futures/packaged_task/copy_assign_fail.cpp : : packaged_task__copy_assign_f ]
           [ thread-compile-fail ./sync/futures/packaged_task/copy_ctor_fail.cpp : : packaged_task__copy_ctor_f ]
- [ thread-run2 ./sync/futures/packaged_task/default_ctor_pass.cpp : packaged_task__default_ctor_p ]
- [ thread-run2 ./sync/futures/packaged_task/func_ctor_pass.cpp : packaged_task__func_ctor_p ]
- [ thread-run2 ./sync/futures/packaged_task/dtor_pass.cpp : packaged_task__dtor_p ]
- [ thread-run2 ./sync/futures/packaged_task/get_future_pass.cpp : packaged_task__get_future_p ]
- [ thread-run2 ./sync/futures/packaged_task/move_ctor_pass.cpp : packaged_task__move_ctor_p ]
- [ thread-run2 ./sync/futures/packaged_task/move_assign_pass.cpp : packaged_task__move_asign_p ]
- [ thread-run2 ./sync/futures/packaged_task/operator_pass.cpp : packaged_task__operator_p ]
- [ thread-run2 ./sync/futures/packaged_task/reset_pass.cpp : packaged_task__reset_p ]
- [ thread-run2 ./sync/futures/packaged_task/use_allocator_pass.cpp : packaged_task__use_allocator_p ]
- [ thread-run2 ./sync/futures/packaged_task/types_pass.cpp : packaged_task__types_p ]
- [ thread-run2 ./sync/futures/packaged_task/member_swap_pass.cpp : packaged_task__member_swap_p ]
- [ thread-run2 ./sync/futures/packaged_task/non_member_swap_pass.cpp : packaged_task__non_member_swap_p ]
- [ thread-run2 ./sync/futures/packaged_task/make_ready_at_thread_exit_pass.cpp : packaged_task__make_ready_at_thread_exit_p ]
+ [ thread-run2-noit ./sync/futures/packaged_task/default_ctor_pass.cpp : packaged_task__default_ctor_p ]
+ [ thread-run2-noit ./sync/futures/packaged_task/func_ctor_pass.cpp : packaged_task__func_ctor_p ]
+ [ thread-run2-noit ./sync/futures/packaged_task/dtor_pass.cpp : packaged_task__dtor_p ]
+ [ thread-run2-noit ./sync/futures/packaged_task/get_future_pass.cpp : packaged_task__get_future_p ]
+ [ thread-run2-noit ./sync/futures/packaged_task/move_ctor_pass.cpp : packaged_task__move_ctor_p ]
+ [ thread-run2-noit ./sync/futures/packaged_task/move_assign_pass.cpp : packaged_task__move_asign_p ]
+ [ thread-run2-noit ./sync/futures/packaged_task/operator_pass.cpp : packaged_task__operator_p ]
+ [ thread-run2-noit ./sync/futures/packaged_task/reset_pass.cpp : packaged_task__reset_p ]
+ [ thread-run2-noit ./sync/futures/packaged_task/use_allocator_pass.cpp : packaged_task__use_allocator_p ]
+ [ thread-run2-noit ./sync/futures/packaged_task/types_pass.cpp : packaged_task__types_p ]
+ [ thread-run2-noit ./sync/futures/packaged_task/member_swap_pass.cpp : packaged_task__member_swap_p ]
+ [ thread-run2-noit ./sync/futures/packaged_task/non_member_swap_pass.cpp : packaged_task__non_member_swap_p ]
+ [ thread-run2-noit ./sync/futures/packaged_task/make_ready_at_thread_exit_pass.cpp : packaged_task__make_ready_at_thread_exit_p ]
     ;
 
 
@@ -340,11 +355,11 @@
     :
           [ thread-compile-fail ./sync/mutual_exclusion/locks/lock_guard/copy_assign_fail.cpp : : lock_guard__cons__copy_assign_f ]
           [ thread-compile-fail ./sync/mutual_exclusion/locks/lock_guard/copy_ctor_fail.cpp : : lock_guard__cons__copy_ctor_f ]
- [ thread-run2 ./sync/mutual_exclusion/locks/lock_guard/adopt_lock_pass.cpp : lock_guard__cons__adopt_lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/lock_guard/default_pass.cpp : lock_guard__cons__default_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/lock_guard/types_pass.cpp : lock_guard__types_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/lock_guard/make_lock_guard_pass.cpp : make_lock_guard_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/lock_guard/make_lock_guard_adopt_lock_pass.cpp : make_lock_guard__adopt_lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/lock_guard/adopt_lock_pass.cpp : lock_guard__cons__adopt_lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/lock_guard/default_pass.cpp : lock_guard__cons__default_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/lock_guard/types_pass.cpp : lock_guard__types_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/lock_guard/make_lock_guard_pass.cpp : make_lock_guard_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/lock_guard/make_lock_guard_adopt_lock_pass.cpp : make_lock_guard__adopt_lock_p ]
     ;
 
     #explicit ts_unique_lock ;
@@ -352,32 +367,32 @@
     :
           [ thread-compile-fail ./sync/mutual_exclusion/locks/unique_lock/cons/copy_assign_fail.cpp : : unique_lock__cons__copy_assign_f ]
           [ thread-compile-fail ./sync/mutual_exclusion/locks/unique_lock/cons/copy_ctor_fail.cpp : : unique_lock__cons__copy_ctor_f ]
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/cons/adopt_lock_pass.cpp : unique_lock__cons__adopt_lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/cons/default_pass.cpp : unique_lock__cons__default_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/cons/defer_lock_pass.cpp : unique_lock__cons__defer_lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/cons/duration_pass.cpp : unique_lock__cons__duration_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/cons/move_assign_pass.cpp : unique_lock__cons__move_assign_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/cons/move_ctor_pass.cpp : unique_lock__cons__move_ctor_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/cons/move_ctor_upgrade_lock_pass.cpp : unique_lock__cons__move_ctor_upgrade_lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/cons/move_ctor_upgrade_lock_try_pass.cpp : unique_lock__cons__move_ctor_upgrade_lock_try_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/cons/move_ctor_upgrade_lock_for_pass.cpp : unique_lock__cons__move_ctor_upgrade_lock_for_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/cons/move_ctor_upgrade_lock_until_pass.cpp : unique_lock__cons__move_ctor_upgrade_lock_until_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/cons/mutex_pass.cpp : unique_lock__cons__mutex_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/cons/time_point_pass.cpp : unique_lock__cons__time_point_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/cons/try_to_lock_pass.cpp : unique_lock__cons__try_to_lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/locking/lock_pass.cpp : unique_lock__lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/locking/try_lock_for_pass.cpp : unique_lock__try_lock_for_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/locking/try_lock_pass.cpp : unique_lock__try_lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/locking/try_lock_until_pass.cpp : unique_lock__try_lock_until_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/locking/unlock_pass.cpp : unique_lock__unlock_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/mod/member_swap_pass.cpp : unique_lock__member_swap_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/mod/non_member_swap_pass.cpp : unique_lock__non_member_swap_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/mod/release_pass.cpp : unique_lock__release_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/obs/mutex_pass.cpp : unique_lock__mutex_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/obs/op_bool_pass.cpp : unique_lock__op_bool_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/adopt_lock_pass.cpp : unique_lock__cons__adopt_lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/default_pass.cpp : unique_lock__cons__default_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/defer_lock_pass.cpp : unique_lock__cons__defer_lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/duration_pass.cpp : unique_lock__cons__duration_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/move_assign_pass.cpp : unique_lock__cons__move_assign_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/move_ctor_pass.cpp : unique_lock__cons__move_ctor_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/move_ctor_upgrade_lock_pass.cpp : unique_lock__cons__move_ctor_upgrade_lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/move_ctor_upgrade_lock_try_pass.cpp : unique_lock__cons__move_ctor_upgrade_lock_try_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/move_ctor_upgrade_lock_for_pass.cpp : unique_lock__cons__move_ctor_upgrade_lock_for_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/move_ctor_upgrade_lock_until_pass.cpp : unique_lock__cons__move_ctor_upgrade_lock_until_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/mutex_pass.cpp : unique_lock__cons__mutex_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/time_point_pass.cpp : unique_lock__cons__time_point_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/try_to_lock_pass.cpp : unique_lock__cons__try_to_lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/locking/lock_pass.cpp : unique_lock__lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/locking/try_lock_for_pass.cpp : unique_lock__try_lock_for_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/locking/try_lock_pass.cpp : unique_lock__try_lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/locking/try_lock_until_pass.cpp : unique_lock__try_lock_until_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/locking/unlock_pass.cpp : unique_lock__unlock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/mod/member_swap_pass.cpp : unique_lock__member_swap_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/mod/non_member_swap_pass.cpp : unique_lock__non_member_swap_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/mod/release_pass.cpp : unique_lock__release_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/obs/mutex_pass.cpp : unique_lock__mutex_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/obs/op_bool_pass.cpp : unique_lock__op_bool_p ]
           #[ thread-compile-fail ./sync/mutual_exclusion/locks/unique_lock/obs/op_int_fail.cpp : : unique_lock__op_int_f ]
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/obs/owns_lock_pass.cpp : unique_lock__owns_lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/types_pass.cpp : unique_lock__types_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/obs/owns_lock_pass.cpp : unique_lock__owns_lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/types_pass.cpp : unique_lock__types_p ]
 
 
     ;
@@ -385,12 +400,12 @@
     #explicit ts_make_unique_lock ;
     test-suite ts_make_unique_lock
     :
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/cons/make_unique_lock_mutex_pass.cpp : make_unique_lock__mutex_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/cons/make_unique_lock_adopt_lock_pass.cpp : make_unique_lock__adopt_lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/cons/make_unique_lock_defer_lock_pass.cpp : make_unique_lock__defer_lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/cons/make_unique_lock_try_to_lock_pass.cpp : make_unique_lock__try_to_lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/make_unique_lock_mutex_pass.cpp : make_unique_lock__mutex_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/make_unique_lock_adopt_lock_pass.cpp : make_unique_lock__adopt_lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/make_unique_lock_defer_lock_pass.cpp : make_unique_lock__defer_lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/make_unique_lock_try_to_lock_pass.cpp : make_unique_lock__try_to_lock_p ]
 
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/cons/make_unique_locks_mutex_pass.cpp : make_unique_locks__mutex_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/make_unique_locks_mutex_pass.cpp : make_unique_locks__mutex_p ]
 
     ;
 
@@ -399,32 +414,32 @@
     :
           [ thread-compile-fail ./sync/mutual_exclusion/locks/shared_lock/cons/copy_assign_fail.cpp : : shared_lock__cons__copy_assign_f ]
           [ thread-compile-fail ./sync/mutual_exclusion/locks/shared_lock/cons/copy_ctor_fail.cpp : : shared_lock__cons__copy_ctor_f ]
- [ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/cons/adopt_lock_pass.cpp : shared_lock__cons__adopt_lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/cons/default_pass.cpp : shared_lock__cons__default_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/cons/defer_lock_pass.cpp : shared_lock__cons__defer_lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/cons/duration_pass.cpp : shared_lock__cons__duration_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/cons/move_assign_pass.cpp : shared_lock__cons__move_assign_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/cons/move_ctor_pass.cpp : shared_lock__cons__move_ctor_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/cons/move_ctor_unique_lock_pass.cpp : shared_lock__cons__move_ctor_unique_lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/cons/move_ctor_upgrade_lock_pass.cpp : shared_lock__cons__move_ctor_upgrade_lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/cons/mutex_pass.cpp : shared_lock__cons__mutex_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/cons/time_point_pass.cpp : shared_lock__cons__time_point_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/cons/try_to_lock_pass.cpp : shared_lock__cons__try_to_lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/locking/lock_pass.cpp : shared_lock__lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/locking/try_lock_for_pass.cpp : shared_lock__try_lock_for_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/locking/try_lock_pass.cpp : shared_lock__try_lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/locking/try_lock_until_pass.cpp : shared_lock__try_lock_until_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/locking/unlock_pass.cpp : shared_lock__unlock_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/mod/member_swap_pass.cpp : shared_lock__member_swap_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/mod/non_member_swap_pass.cpp : shared_lock__non_member_swap_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/mod/release_pass.cpp : shared_lock__release_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/obs/mutex_pass.cpp : shared_lock__mutex_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/obs/op_bool_pass.cpp : shared_lock__op_bool_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/obs/owns_lock_pass.cpp : shared_lock__owns_lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/shared_lock/types_pass.cpp : shared_lock__types_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/cons/adopt_lock_pass.cpp : shared_lock__cons__adopt_lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/cons/default_pass.cpp : shared_lock__cons__default_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/cons/defer_lock_pass.cpp : shared_lock__cons__defer_lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/cons/duration_pass.cpp : shared_lock__cons__duration_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/cons/move_assign_pass.cpp : shared_lock__cons__move_assign_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/cons/move_ctor_pass.cpp : shared_lock__cons__move_ctor_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/cons/move_ctor_unique_lock_pass.cpp : shared_lock__cons__move_ctor_unique_lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/cons/move_ctor_upgrade_lock_pass.cpp : shared_lock__cons__move_ctor_upgrade_lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/cons/mutex_pass.cpp : shared_lock__cons__mutex_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/cons/time_point_pass.cpp : shared_lock__cons__time_point_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/cons/try_to_lock_pass.cpp : shared_lock__cons__try_to_lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/locking/lock_pass.cpp : shared_lock__lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/locking/try_lock_for_pass.cpp : shared_lock__try_lock_for_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/locking/try_lock_pass.cpp : shared_lock__try_lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/locking/try_lock_until_pass.cpp : shared_lock__try_lock_until_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/locking/unlock_pass.cpp : shared_lock__unlock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/mod/member_swap_pass.cpp : shared_lock__member_swap_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/mod/non_member_swap_pass.cpp : shared_lock__non_member_swap_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/mod/release_pass.cpp : shared_lock__release_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/obs/mutex_pass.cpp : shared_lock__mutex_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/obs/op_bool_pass.cpp : shared_lock__op_bool_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/obs/owns_lock_pass.cpp : shared_lock__owns_lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/types_pass.cpp : shared_lock__types_p ]
 
- [ thread-run2-h ./sync/mutual_exclusion/locks/shared_lock/cons/default_pass.cpp : shared_lock__cons__default_p ]
- [ thread-run2-h ./sync/mutual_exclusion/locks/shared_lock/cons/defer_lock_pass.cpp : shared_lock__cons__defer_lock_p ]
+ #[ thread-run2-h ./sync/mutual_exclusion/locks/shared_lock/cons/default_pass.cpp : shared_lock__cons__default_p ]
+ #[ thread-run2-h ./sync/mutual_exclusion/locks/shared_lock/cons/defer_lock_pass.cpp : shared_lock__cons__defer_lock_p ]
 
     ;
 
@@ -433,28 +448,28 @@
     :
           [ thread-compile-fail ./sync/mutual_exclusion/locks/upgrade_lock/cons/copy_assign_fail.cpp : : upgrade_lock__cons__copy_assign_f ]
           [ thread-compile-fail ./sync/mutual_exclusion/locks/upgrade_lock/cons/copy_ctor_fail.cpp : : upgrade_lock__cons__copy_ctor_f ]
- [ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/cons/adopt_lock_pass.cpp : upgrade_lock__cons__adopt_lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/cons/default_pass.cpp : upgrade_lock__cons__default_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/cons/defer_lock_pass.cpp : upgrade_lock__cons__defer_lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/cons/duration_pass.cpp : upgrade_lock__cons__duration_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/cons/move_assign_pass.cpp : upgrade_lock__cons__move_assign_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/cons/move_ctor_pass.cpp : upgrade_lock__cons__move_ctor_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/cons/move_ctor_unique_lock_pass.cpp : upgrade_lock__cons__move_ctor_unique_lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/cons/mutex_pass.cpp : upgrade_lock__cons__mutex_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/cons/time_point_pass.cpp : upgrade_lock__cons__time_point_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/cons/try_to_lock_pass.cpp : upgrade_lock__cons__try_to_lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/locking/lock_pass.cpp : upgrade_lock__lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/locking/try_lock_for_pass.cpp : upgrade_lock__try_lock_for_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/locking/try_lock_pass.cpp : upgrade_lock__try_lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/locking/try_lock_until_pass.cpp : upgrade_lock__try_lock_until_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/locking/unlock_pass.cpp : upgrade_lock__unlock_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/mod/member_swap_pass.cpp : upgrade_lock__member_swap_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/mod/non_member_swap_pass.cpp : upgrade_lock__non_member_swap_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/mod/release_pass.cpp : upgrade_lock__release_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/obs/mutex_pass.cpp : upgrade_lock__mutex_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/obs/op_bool_pass.cpp : upgrade_lock__op_bool_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/obs/owns_lock_pass.cpp : upgrade_lock__owns_lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/types_pass.cpp : upgrade_lock__types_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/cons/adopt_lock_pass.cpp : upgrade_lock__cons__adopt_lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/cons/default_pass.cpp : upgrade_lock__cons__default_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/cons/defer_lock_pass.cpp : upgrade_lock__cons__defer_lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/cons/duration_pass.cpp : upgrade_lock__cons__duration_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/cons/move_assign_pass.cpp : upgrade_lock__cons__move_assign_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/cons/move_ctor_pass.cpp : upgrade_lock__cons__move_ctor_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/cons/move_ctor_unique_lock_pass.cpp : upgrade_lock__cons__move_ctor_unique_lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/cons/mutex_pass.cpp : upgrade_lock__cons__mutex_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/cons/time_point_pass.cpp : upgrade_lock__cons__time_point_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/cons/try_to_lock_pass.cpp : upgrade_lock__cons__try_to_lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/locking/lock_pass.cpp : upgrade_lock__lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/locking/try_lock_for_pass.cpp : upgrade_lock__try_lock_for_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/locking/try_lock_pass.cpp : upgrade_lock__try_lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/locking/try_lock_until_pass.cpp : upgrade_lock__try_lock_until_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/locking/unlock_pass.cpp : upgrade_lock__unlock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/mod/member_swap_pass.cpp : upgrade_lock__member_swap_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/mod/non_member_swap_pass.cpp : upgrade_lock__non_member_swap_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/mod/release_pass.cpp : upgrade_lock__release_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/obs/mutex_pass.cpp : upgrade_lock__mutex_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/obs/op_bool_pass.cpp : upgrade_lock__op_bool_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/obs/owns_lock_pass.cpp : upgrade_lock__owns_lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/types_pass.cpp : upgrade_lock__types_p ]
     ;
 
     #explicit ts_mutex ;
@@ -462,10 +477,10 @@
     :
           [ thread-compile-fail ./sync/mutual_exclusion/mutex/assign_fail.cpp : : mutex__assign_f ]
           [ thread-compile-fail ./sync/mutual_exclusion/mutex/copy_fail.cpp : : mutex__copy_f ]
- [ thread-run2 ./sync/mutual_exclusion/mutex/default_pass.cpp : mutex__default_p ]
- [ thread-run2 ./sync/mutual_exclusion/mutex/lock_pass.cpp : mutex__lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/mutex/native_handle_pass.cpp : mutex__native_handle_p ]
- [ thread-run2 ./sync/mutual_exclusion/mutex/try_lock_pass.cpp : mutex__try_lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/mutex/default_pass.cpp : mutex__default_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/mutex/lock_pass.cpp : mutex__lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/mutex/native_handle_pass.cpp : mutex__native_handle_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/mutex/try_lock_pass.cpp : mutex__try_lock_p ]
     ;
 
     #explicit ts_recursive_mutex ;
@@ -473,10 +488,10 @@
     :
           [ thread-compile-fail ./sync/mutual_exclusion/recursive_mutex/assign_fail.cpp : : recursive_mutex__assign_f ]
           [ thread-compile-fail ./sync/mutual_exclusion/recursive_mutex/copy_fail.cpp : : recursive_mutex__copy_f ]
- [ thread-run2 ./sync/mutual_exclusion/recursive_mutex/default_pass.cpp : recursive_mutex__default_p ]
- [ thread-run2 ./sync/mutual_exclusion/recursive_mutex/lock_pass.cpp : recursive_mutex__lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/recursive_mutex/native_handle_pass.cpp : recursive_mutex__native_handle_p ]
- [ thread-run2 ./sync/mutual_exclusion/recursive_mutex/try_lock_pass.cpp : recursive_mutex__try_lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/recursive_mutex/default_pass.cpp : recursive_mutex__default_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/recursive_mutex/lock_pass.cpp : recursive_mutex__lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/recursive_mutex/native_handle_pass.cpp : recursive_mutex__native_handle_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/recursive_mutex/try_lock_pass.cpp : recursive_mutex__try_lock_p ]
     ;
 
     #explicit ts_recursive_timed_mutex ;
@@ -484,12 +499,12 @@
     :
           [ thread-compile-fail ./sync/mutual_exclusion/recursive_timed_mutex/assign_fail.cpp : : recursive_timed_mutex__assign_f ]
           [ thread-compile-fail ./sync/mutual_exclusion/recursive_timed_mutex/copy_fail.cpp : : recursive_timed_mutex__copy_f ]
- [ thread-run2 ./sync/mutual_exclusion/recursive_timed_mutex/default_pass.cpp : recursive_timed_mutex__default_p ]
- [ thread-run2 ./sync/mutual_exclusion/recursive_timed_mutex/lock_pass.cpp : recursive_timed_mutex__lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/recursive_timed_mutex/native_handle_pass.cpp : recursive_timed_mutex__native_handle_p ]
- [ thread-run2 ./sync/mutual_exclusion/recursive_timed_mutex/try_lock_for_pass.cpp : recursive_timed_mutex__try_lock_for_p ]
- [ thread-run2 ./sync/mutual_exclusion/recursive_timed_mutex/try_lock_pass.cpp : recursive_timed_mutex__try_lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/recursive_timed_mutex/try_lock_until_pass.cpp : recursive_timed_mutex__try_lock_until_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/recursive_timed_mutex/default_pass.cpp : recursive_timed_mutex__default_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/recursive_timed_mutex/lock_pass.cpp : recursive_timed_mutex__lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/recursive_timed_mutex/native_handle_pass.cpp : recursive_timed_mutex__native_handle_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/recursive_timed_mutex/try_lock_for_pass.cpp : recursive_timed_mutex__try_lock_for_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/recursive_timed_mutex/try_lock_pass.cpp : recursive_timed_mutex__try_lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/recursive_timed_mutex/try_lock_until_pass.cpp : recursive_timed_mutex__try_lock_until_p ]
     ;
 
     #explicit ts_timed_mutex ;
@@ -497,12 +512,12 @@
     :
           [ thread-compile-fail ./sync/mutual_exclusion/timed_mutex/assign_fail.cpp : : timed_mutex__assign_f ]
           [ thread-compile-fail ./sync/mutual_exclusion/timed_mutex/copy_fail.cpp : : timed_mutex__copy_f ]
- [ thread-run2 ./sync/mutual_exclusion/timed_mutex/default_pass.cpp : timed_mutex__default_p ]
- [ thread-run2 ./sync/mutual_exclusion/timed_mutex/lock_pass.cpp : timed_mutex__lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/timed_mutex/native_handle_pass.cpp : timed_mutex__native_handle_p ]
- [ thread-run2 ./sync/mutual_exclusion/timed_mutex/try_lock_for_pass.cpp : timed_mutex__try_lock_for_p ]
- [ thread-run2 ./sync/mutual_exclusion/timed_mutex/try_lock_pass.cpp : timed_mutex__try_lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/timed_mutex/try_lock_until_pass.cpp : timed_mutex__try_lock_until_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/timed_mutex/default_pass.cpp : timed_mutex__default_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/timed_mutex/lock_pass.cpp : timed_mutex__lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/timed_mutex/native_handle_pass.cpp : timed_mutex__native_handle_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/timed_mutex/try_lock_for_pass.cpp : timed_mutex__try_lock_for_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/timed_mutex/try_lock_pass.cpp : timed_mutex__try_lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/timed_mutex/try_lock_until_pass.cpp : timed_mutex__try_lock_until_p ]
     ;
 
     #explicit ts_shared_mutex ;
@@ -510,69 +525,69 @@
     :
           [ thread-compile-fail ./sync/mutual_exclusion/shared_mutex/assign_fail.cpp : : shared_mutex__assign_f ]
           [ thread-compile-fail ./sync/mutual_exclusion/shared_mutex/copy_fail.cpp : : shared_mutex__copy_f ]
- [ thread-run2 ./sync/mutual_exclusion/shared_mutex/default_pass.cpp : shared_mutex__default_p ]
- [ thread-run2 ./sync/mutual_exclusion/shared_mutex/lock_pass.cpp : shared_mutex__lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/shared_mutex/try_lock_for_pass.cpp : shared_mutex__try_lock_for_p ]
- [ thread-run2 ./sync/mutual_exclusion/shared_mutex/try_lock_pass.cpp : shared_mutex__try_lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/shared_mutex/try_lock_until_pass.cpp : shared_mutex__try_lock_until_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/shared_mutex/default_pass.cpp : shared_mutex__default_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/shared_mutex/lock_pass.cpp : shared_mutex__lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/shared_mutex/try_lock_for_pass.cpp : shared_mutex__try_lock_for_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/shared_mutex/try_lock_pass.cpp : shared_mutex__try_lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/shared_mutex/try_lock_until_pass.cpp : shared_mutex__try_lock_until_p ]
 
- [ thread-run2-h ./sync/mutual_exclusion/shared_mutex/default_pass.cpp : shared_mutex__default_p ]
+ #[ thread-run2-h ./sync/mutual_exclusion/shared_mutex/default_pass.cpp : shared_mutex__default_p ]
     ;
 
     #explicit ts_this_thread ;
     test-suite ts_this_thread
     :
- [ thread-run2 ./threads/this_thread/get_id/get_id_pass.cpp : this_thread__get_id_p ]
- [ thread-run2 ./threads/this_thread/sleep_for/sleep_for_pass.cpp : this_thread__sleep_for_p ]
- [ thread-run2 ./threads/this_thread/sleep_until/sleep_until_pass.cpp : this_thread__sleep_until_p ]
+ [ thread-run2-noit ./threads/this_thread/get_id/get_id_pass.cpp : this_thread__get_id_p ]
+ [ thread-run2-noit ./threads/this_thread/sleep_for/sleep_for_pass.cpp : this_thread__sleep_for_p ]
+ [ thread-run2-noit ./threads/this_thread/sleep_until/sleep_until_pass.cpp : this_thread__sleep_until_p ]
     ;
 
     #explicit ts_thread ;
     test-suite ts_thread
     :
           [ thread-compile-fail ./threads/thread/assign/copy_fail.cpp : : thread__assign__copy_f ]
- [ thread-run2 ./threads/thread/assign/move_pass.cpp : thread__assign__move_p ]
+ [ thread-run2-noit ./threads/thread/assign/move_pass.cpp : thread__assign__move_p ]
           [ thread-compile-fail ./threads/thread/constr/copy_fail.cpp : : thread__constr__copy_f ]
- [ thread-run2 ./threads/thread/constr/default_pass.cpp : thread__constr__default_p ]
+ [ thread-run2-noit ./threads/thread/constr/default_pass.cpp : thread__constr__default_p ]
           [ thread-run-lib2 ./threads/thread/constr/F_pass.cpp : thread__constr__F_p ]
           [ thread-run-lib2 ./threads/thread/constr/FArgs_pass.cpp : thread__constr__FArgs_p ]
- [ thread-run2 ./threads/thread/constr/Frvalue_pass.cpp : thread__constr__Frvalue_p ]
- [ thread-run2 ./threads/thread/constr/FrvalueArgs_pass.cpp : thread__constr__FrvalueArgs_p ]
- [ thread-run2 ./threads/thread/constr/move_pass.cpp : thread__constr__move_p ]
- [ thread-run2 ./threads/thread/destr/dtor_pass.cpp : thread__destr__dtor_p ]
- [ thread-run2 ./threads/thread/id/hash_pass.cpp : thread__id__hash_p ]
- [ thread-run2 ./threads/thread/members/detach_pass.cpp : thread__detach_p ]
- [ thread-run2 ./threads/thread/members/get_id_pass.cpp : thread__get_id_p ]
- [ thread-run2 ./threads/thread/members/join_pass.cpp : thread__join_p ]
- [ thread-run2 ./threads/thread/members/try_join_until_pass.cpp : thread__join_until_p ]
- [ thread-run2 ./threads/thread/members/try_join_for_pass.cpp : thread__join_for_p ]
- [ thread-run2 ./threads/thread/members/joinable_pass.cpp : thread__joinable_p ]
- [ thread-run2 ./threads/thread/members/native_handle_pass.cpp : thread__native_handle_p ]
- [ thread-run2 ./threads/thread/members/swap_pass.cpp : thread__swap_p ]
- [ thread-run2 ./threads/thread/non_members/swap_pass.cpp : swap_threads_p ]
- [ thread-run2 ./threads/thread/static/hardware_concurrency_pass.cpp : thread__hardware_concurrency_p ]
+ [ thread-run2-noit ./threads/thread/constr/Frvalue_pass.cpp : thread__constr__Frvalue_p ]
+ [ thread-run2-noit ./threads/thread/constr/FrvalueArgs_pass.cpp : thread__constr__FrvalueArgs_p ]
+ [ thread-run2-noit ./threads/thread/constr/move_pass.cpp : thread__constr__move_p ]
+ [ thread-run2-noit ./threads/thread/destr/dtor_pass.cpp : thread__destr__dtor_p ]
+ [ thread-run2-noit ./threads/thread/id/hash_pass.cpp : thread__id__hash_p ]
+ [ thread-run2-noit ./threads/thread/members/detach_pass.cpp : thread__detach_p ]
+ [ thread-run2-noit ./threads/thread/members/get_id_pass.cpp : thread__get_id_p ]
+ [ thread-run2-noit ./threads/thread/members/join_pass.cpp : thread__join_p ]
+ [ thread-run2-noit ./threads/thread/members/try_join_until_pass.cpp : thread__join_until_p ]
+ [ thread-run2-noit ./threads/thread/members/try_join_for_pass.cpp : thread__join_for_p ]
+ [ thread-run2-noit ./threads/thread/members/joinable_pass.cpp : thread__joinable_p ]
+ [ thread-run2-noit ./threads/thread/members/native_handle_pass.cpp : thread__native_handle_p ]
+ [ thread-run2-noit ./threads/thread/members/swap_pass.cpp : thread__swap_p ]
+ [ thread-run2-noit ./threads/thread/non_members/swap_pass.cpp : swap_threads_p ]
+ [ thread-run2-noit ./threads/thread/static/hardware_concurrency_pass.cpp : thread__hardware_concurrency_p ]
     ;
 
     #explicit ts_container ;
     test-suite ts_container
     :
- [ thread-run2 ./threads/container/thread_vector_pass.cpp : container__thread_vector_p ]
- [ thread-run2 ./threads/container/thread_ptr_list_pass.cpp : container__thread_ptr_list_p ]
+ [ thread-run2-noit ./threads/container/thread_vector_pass.cpp : container__thread_vector_p ]
+ [ thread-run2-noit ./threads/container/thread_ptr_list_pass.cpp : container__thread_ptr_list_p ]
     ;
 
     #explicit ts_examples ;
     test-suite ts_examples
     :
- [ thread-run ../example/monitor.cpp ]
+ [ thread-run2-noit ../example/monitor.cpp : ex_monitor ]
           [ compile ../example/starvephil.cpp ]
           #[ compile ../example/tennis.cpp ]
           [ compile ../example/condition.cpp ]
- [ thread-run ../example/mutex.cpp ]
- [ thread-run ../example/once.cpp ]
- [ thread-run ../example/recursive_mutex.cpp ]
- [ thread-run2 ../example/thread.cpp : ex_thread ]
- [ thread-run ../example/thread_group.cpp ]
- [ thread-run ../example/tss.cpp ]
+ [ thread-run2-noit ../example/mutex.cpp : ex_mutex ]
+ [ thread-run2-noit ../example/once.cpp : ex_once ]
+ [ thread-run2-noit ../example/recursive_mutex.cpp : ex_recursive_mutex ]
+ [ thread-run2-noit ../example/thread.cpp : ex_thread ]
+ [ thread-run2-noit ../example/thread_group.cpp : ex_thread_group ]
+ [ thread-run2-noit ../example/tss.cpp : ex_tss ]
           [ thread-run ../example/xtime.cpp ]
           [ thread-run ../example/shared_monitor.cpp ]
           [ thread-run ../example/shared_mutex.cpp ]
@@ -580,25 +595,25 @@
           #[ thread-run ../example/vhh_shared_mutex.cpp ]
           [ thread-run ../example/make_future.cpp ]
           [ thread-run ../example/future_then.cpp ]
- [ thread-run ../example/synchronized_value.cpp ]
- [ thread-run ../example/synchronized_person.cpp ]
- [ thread-run ../example/thread_guard.cpp ]
- [ thread-run ../example/scoped_thread.cpp ]
- [ thread-run ../example/strict_lock.cpp ]
- [ thread-run ../example/ba_externallly_locked.cpp ]
+ [ thread-run2-noit ../example/synchronized_value.cpp : ex_synchronized_value ]
+ [ thread-run2-noit ../example/synchronized_person.cpp : ex_synchronized_person ]
+ [ thread-run2-noit ../example/thread_guard.cpp : ex_thread_guard ]
+ [ thread-run2-noit ../example/scoped_thread.cpp : ex_scoped_thread ]
+ [ thread-run2-noit ../example/strict_lock.cpp : ex_strict_lock ]
+ [ thread-run2-noit ../example/ba_externallly_locked.cpp : ex_ba_externallly_locked ]
 
     ;
 
     #explicit ts_shared_upwards ;
     test-suite ts_shared_upwards
     :
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/cons/move_ctor_shared_lock_try_pass.cpp : unique_lock__cons__move_ctor_shared_lock_try_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/cons/move_ctor_shared_lock_for_pass.cpp : unique_lock__cons__move_ctor_shared_lock_for_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/unique_lock/cons/move_ctor_shared_lock_until_pass.cpp : unique_lock__cons__move_ctor_shared_lock_until_p ]
-
- [ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/cons/move_ctor_shared_lock_try_pass.cpp : upgrade_lock__cons__move_ctor_shared_lock_try_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/cons/move_ctor_shared_lock_for_pass.cpp : upgrade_lock__cons__move_ctor_shared_lock_for_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/upgrade_lock/cons/move_ctor_shared_lock_until_pass.cpp : upgrade_lock__cons__move_ctor_shared_lock_until_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/move_ctor_shared_lock_try_pass.cpp : unique_lock__cons__move_ctor_shared_lock_try_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/move_ctor_shared_lock_for_pass.cpp : unique_lock__cons__move_ctor_shared_lock_for_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/move_ctor_shared_lock_until_pass.cpp : unique_lock__cons__move_ctor_shared_lock_until_p ]
+
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/cons/move_ctor_shared_lock_try_pass.cpp : upgrade_lock__cons__move_ctor_shared_lock_try_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/cons/move_ctor_shared_lock_for_pass.cpp : upgrade_lock__cons__move_ctor_shared_lock_for_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/cons/move_ctor_shared_lock_until_pass.cpp : upgrade_lock__cons__move_ctor_shared_lock_until_p ]
     ;
 
 
@@ -607,9 +622,9 @@
     :
           [ thread-compile-fail ./sync/mutual_exclusion/locks/shared_lock_guard/copy_assign_fail.cpp : : shared_lock_guard__cons__copy_assign_f ]
           [ thread-compile-fail ./sync/mutual_exclusion/locks/shared_lock_guard/copy_ctor_fail.cpp : : shared_lock_guard__cons__copy_ctor_f ]
- [ thread-run2 ./sync/mutual_exclusion/locks/shared_lock_guard/adopt_lock_pass.cpp : shared_lock_guard__cons__adopt_lock_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/shared_lock_guard/default_pass.cpp : shared_lock_guard__cons__default_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/shared_lock_guard/types_pass.cpp : shared_lock_guard__types_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock_guard/adopt_lock_pass.cpp : shared_lock_guard__cons__adopt_lock_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock_guard/default_pass.cpp : shared_lock_guard__cons__default_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock_guard/types_pass.cpp : shared_lock_guard__types_p ]
     ;
 
     #explicit ts_reverse_lock ;
@@ -617,13 +632,18 @@
     :
           [ thread-compile-fail ./sync/mutual_exclusion/locks/reverse_lock/copy_assign_fail.cpp : : reverse_lock__copy_assign_f ]
           [ thread-compile-fail ./sync/mutual_exclusion/locks/reverse_lock/copy_ctor_fail.cpp : : reverse_lock__copy_ctor_f ]
- [ thread-run2 ./sync/mutual_exclusion/locks/reverse_lock/unique_lock_ctor_pass.cpp : reverse_lock__unique_lock_ctor_p ]
- [ thread-run2 ./sync/mutual_exclusion/locks/reverse_lock/types_pass.cpp : reverse_lock__types_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/reverse_lock/unique_lock_ctor_pass.cpp : reverse_lock__unique_lock_ctor_p ]
+ [ thread-run2-noit ./sync/mutual_exclusion/locks/reverse_lock/types_pass.cpp : reverse_lock__types_p ]
     ;
 
     explicit ts_ ;
     test-suite ts_
     :
+ [ thread-run2-noit ./sync/conditions/notify_all_at_thread_exit_pass.cpp : notify_all_at_thread_exit_p2 ]
+ [ thread-run2-noit ./threads/thread/members/try_join_until_pass.cpp : thread__join_until_p2 ]
+ [ thread-run2-noit ./threads/thread/members/try_join_for_pass.cpp : thread__join_for_p2 ]
+ [ thread-run2-noit ./sync/futures/async/async_pass.cpp : async__async_p2 ]
+
           #[ thread-run test_7665.cpp ]
           #[ thread-run test_7666.cpp ]
           #[ thread-run ../example/unwrap.cpp ]


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk