By default, OpenMP is not enabled in gcc, which means the test is run
sequentially and compiler warnings about an unsupported #pragma. Enable
OpenMP for gcc and this particular test.
Increased BOOST_THREAD_TEST_TIME_MS (a.k.a. max_diff) threshold that is
used in many tests for checking wakeup time delays to 600 ms on systems
other than Linux. This is to account increased delays on VMs that are
used to run CI on BSD systems, which occasionally cause excessively long
latencies in thread communication and wakeups.
Allocating an exception object may recursively call our custom operator
new, which would result in an infinite recursion and a crash. So only
initiate the throw when the operator is called non-recursively.
Otherwise, let the memory allocation proceed using malloc.
The operator new is not supposed to return null pointers, so throw
bad_alloc when malloc returns null. This should avoid segmentation
faults if malloc fails.
Use thread barriers to synchronize between the main and async threads
instead of relying on timeouts. This should make these tests more
reliable in CI.
Condition variable timed waits may occasionally return true even if
noone notifies on the variable, which breaks the tests that expect
a timeout. This is considered as spurious wakeups. Add a few attempts
at waiting, which should significantly reduce the likelyhood of
test failures.
In condition variable notification tests, join the test threads
before making the final check for the number of notifications instead
of relying on timeouts. This should make the tests more reliable,
especially on Windows.
C++11 deprecates implicit default copy constructors and operators if the class
has user-defined destructor or copy constructor/operator. gcc 9 generates
warnings when this deprecated language feature is used. This commit fixes that
by providing user-defained copy constructors/operators where needed. The
added definitions are equivalent to the implicitly generated by the compiler.
For thread::id, removed copy constructor to allow the compiler generate all
set of constructors and assignment operators, including move.
1. Make inclusion of boost/bind/bind.hpp conditional in some cases, when the
code actually conditionally uses boost::bind. Reduces compile-time overhead
and fixes https://github.com/boostorg/thread/issues/307.
2. Remove some unnecessary uses of boost::ref. This allows to avoid including
boost/core/ref.hpp in a few places, and avoids the associated template
instantiation overhead in others.
3. Replace deprecated header includes with the more recent alternatives. For
example: boost/detail/lightweight_test.hpp -> boost/core/lightweight_test.hpp,
boost/ref.hpp -> boost/core/ref.hpp.
4. Replace some blanket includes with the more fine-grained ones. For example,
boost/utility.hpp, boost/atomic.hpp. This reduces compile time overhead.
5. Add some missing includes, for example, boost/core/ref.hpp and
boost/type_traits/is_same.hpp.
6. Replace uses of std::is_same with boost::is_same (with the corresponding
included header) since the standard type_traits header presence and validity
is not tested by the code. Using boost::is_same makes the code more portable.