valgrind --tool=helgrind /build/bjam/boost_1.43.0/libs/xint/test/test_add.test/gcc-4.4/debug/test_add ==6700== Helgrind, a thread error detector ==6700== Copyright (C) 2007-2009, and GNU GPL'd, by OpenWorks LLP et al. ==6700== Using Valgrind-3.5.0 and LibVEX; rerun with -h for copyright info ==6700== Command: /build/bjam/boost_1.43.0/libs/xint/test/test_add.test/gcc-4.4/debug/test_add ==6700== Running 6 test cases... ==6700== Thread #1 is the program's root thread ==6700== ==6700== Thread #1: Attempt to re-lock a non-recursive lock I already hold ==6700== at 0x4C25AF5: pthread_mutex_lock (in /usr/lib64/valgrind/vgpreload_helgrind-amd64-linux.so) ==6700== by 0x407ECD5: boost::mutex::lock() (mutex.hpp:51) ==6700== by 0x4080434: boost::xint::detail::generator_t::set_generator(boost::xint::detail::base_random_generator*) (random.cpp:61) ==6700== by 0x4080510: boost::xint::detail::generator_t::init() (random.cpp:75) ==6700== by 0x40803D0: boost::xint::detail::generator_t::generator_t() (random.cpp:51) ==6700== by 0x407DDB7: boost::xint::random_by_size(unsigned long, bool, bool, bool) (random.cpp:222) ==6700== by 0x405BDE: boost::xint::testAddSubtract::test_method() (test_add.cpp:73) ==6700== by 0x405901: boost::xint::testAddSubtract_invoker() (test_add.cpp:65) ==6700== by 0x40C13B: boost::unit_test::ut_detail::unused boost::unit_test::ut_detail::invoker::invoke(void (*&)()) (callback.hpp:56) ==6700== by 0x40BFA2: boost::unit_test::ut_detail::callback0_impl_t::invoke() (callback.hpp:89) ==6700== by 0x4F132C8: boost::unit_test::callback0::operator()() const (callback.hpp:118) ==6700== by 0x4F3705E: boost::unit_test::(anonymous namespace)::zero_return_wrapper_t >::operator()() (unit_test_monitor.ipp:41) ==6700== ==6700== Thread #1: Exiting thread still holds 1 lock ==6700== at 0x5988434: __lll_lock_wait (in /lib64/libpthread-2.9.so) ==6700== by 0x5983CEF: _L_lock_102 (in /lib64/libpthread-2.9.so) ==6700== by 0x59835DC: pthread_mutex_lock (in /lib64/libpthread-2.9.so) ==6700== by 0x4C25B34: pthread_mutex_lock (in /usr/lib64/valgrind/vgpreload_helgrind-amd64-linux.so) ==6700== by 0x407ECD5: boost::mutex::lock() (mutex.hpp:51) ==6700== by 0x4080434: boost::xint::detail::generator_t::set_generator(boost::xint::detail::base_random_generator*) (random.cpp:61) ==6700== by 0x4080510: boost::xint::detail::generator_t::init() (random.cpp:75) ==6700== by 0x40803D0: boost::xint::detail::generator_t::generator_t() (random.cpp:51) ==6700== by 0x407DDB7: boost::xint::random_by_size(unsigned long, bool, bool, bool) (random.cpp:222) ==6700== by 0x405BDE: boost::xint::testAddSubtract::test_method() (test_add.cpp:73) ==6700== by 0x405901: boost::xint::testAddSubtract_invoker() (test_add.cpp:65) ==6700== by 0x40C13B: boost::unit_test::ut_detail::unused boost::unit_test::ut_detail::invoker::invoke(void (*&)()) (callback.hpp:56) ==6700== ==6700== ==6700== For counts of detected and suppressed errors, rerun with: -v ==6700== Use --history-level=approx or =none to gain increased speed, at ==6700== the cost of reduced accuracy of conflicting-access information ==6700== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)