#42496: boost::thread join() crashes under Mountain Lion. -------------------------+-------------------------------- Reporter: trojanfoe@… | Owner: macports-tickets@… Type: defect | Status: new Priority: Normal | Milestone: Component: ports | Version: 2.2.1 Keywords: | Port: boost -------------------------+-------------------------------- I have boost-1.55.0_1 installed under Mavericks and Mountain Lion and the code (attached) crashes under Mountain Lion: {{{ kraken:tmp $ uname -a Darwin kraken.trojanfoe.com 12.5.0 Darwin Kernel Version 12.5.0: Sun Sep 29 13:33:47 PDT 2013; root:xnu-2050.48.12~1/RELEASE_X86_64 x86_64 kraken:tmp $ port info boost boost @1.55.0_1 (devel) Variants: clang30, clang31, clang32, clang33, clang34, clang35, debug, dragonegg30, dragonegg31, dragonegg32, dragonegg33, dragonegg34, g95, gcc44, gcc45, gcc46, gcc47, gcc48, gcc49, gfortran, llvm, mpich, mpich_devel, [+]no_single, [+]no_static, openmpi, openmpi_devel, python25, python26, [+]python27, python31, python32, python33, regex_match_extra, universal Description: Boost provides free portable peer-reviewed C++ libraries. The emphasis is on portable libraries which work well with the C++ Standard Library. Homepage: http://www.boost.org Library Dependencies: zlib, expat, bzip2, libiconv, icu, python27 Platforms: darwin License: Boost-1 Maintainers: nomaintainer@macports.org kraken:tmp $ clang --version Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn) Target: x86_64-apple-darwin12.5.0 Thread model: posix kraken:tmp $ clang++ -std=c++11 -stdlib=libc++ -I /opt/local/include -o threadtest threadtest.cpp -L /opt/local/lib -lboost_system-mt -lboost_thread-mt kraken:tmp $ lldb threadtest Current executable set to 'threadtest' (x86_64). (lldb) run Process 61735 launched: '/Users/andy/tmp/threadtest' (x86_64) starting enter thread exit thread Process 61735 stopped * thread #1: tid = 0x230b7b, 0x000000010004e725 libboost_thread- mt.dylib`boost::detail::thread_data_base::~thread_data_base() + 181, queue = 'com.apple.main-thread, stop reason = EXC_BAD_ACCESS (code=1, address=0x1) frame #0: 0x000000010004e725 libboost_thread- mt.dylib`boost::detail::thread_data_base::~thread_data_base() + 181 libboost_thread- mt.dylib`boost::detail::thread_data_base::~thread_data_base() + 181: -> 0x10004e725: movq (%r13), %rbx 0x10004e729: leaq 56(%rbx), %rax 0x10004e72d: movq %rax, -56(%rbp) 0x10004e731: movb $0, -48(%rbp) (lldb) bt * thread #1: tid = 0x230b7b, 0x000000010004e725 libboost_thread- mt.dylib`boost::detail::thread_data_base::~thread_data_base() + 181, queue = 'com.apple.main-thread, stop reason = EXC_BAD_ACCESS (code=1, address=0x1) frame #0: 0x000000010004e725 libboost_thread- mt.dylib`boost::detail::thread_data_base::~thread_data_base() + 181 frame #1: 0x000000010000b685 threadtest`boost::detail::thread_data<boost::_bi::bind_t<void, boost::_mfi::mf0<void, Test>, boost::_bi::list1<boost::_bi::value<Test*> >
::~thread_data() + 21 frame #2: 0x000000010000a495 threadtest`boost::detail::thread_data<boost::_bi::bind_t<void, boost::_mfi::mf0<void, Test>, boost::_bi::list1<boost::_bi::value<Test*> > ::~thread_data() + 21 frame #3: 0x000000010000a4b9 threadtest`boost::detail::thread_data<boost::_bi::bind_t<void, boost::_mfi::mf0<void, Test>, boost::_bi::list1<boost::_bi::value<Test*> > ::~thread_data() + 25 frame #4: 0x000000010000c5ae threadtest`void boost::checked_delete<boost::detail::thread_data<boost::_bi::bind_t<void, boost::_mfi::mf0<void, Test>, boost::_bi::list1<boost::_bi::value<Test*> >
(boost::detail::thread_data<boost::_bi::bind_t<void, boost::_mfi::mf0<void, Test>, boost::_bi::list1<boost::_bi::value<Test*> > *) + 46 frame #5: 0x000000010000c6a9 threadtest`boost::detail::sp_counted_impl_p<boost::detail::thread_data<boost::_bi::bind_t<void, boost::_mfi::mf0<void, Test>, boost::_bi::list1<boost::_bi::value<Test*> > ::dispose() + 25 frame #6: 0x000000010004f2af libboost_thread- mt.dylib`boost::thread::join_noexcept() + 447 frame #7: 0x00000001000027f4 threadtest`boost::thread::join() + 148 frame #8: 0x000000010000157d threadtest`Test::test() + 589 frame #9: 0x0000000100001741 threadtest`main + 33 frame #10: 0x00007fff86cea7e1 libdyld.dylib`start + 1 (lldb) quit Quitting LLDB will kill one or more processes. Do you really want to proceed: [Y/n] y kraken:tmp $
}}} Note that the same code works flawlessly under Mavericks: {{{ medusa:tmp $ uname -a Darwin medusa.local 13.0.0 Darwin Kernel Version 13.0.0: Thu Sep 19 22:22:27 PDT 2013; root:xnu-2422.1.72~6/RELEASE_X86_64 x86_64 medusa:tmp $ port info boost boost @1.55.0_1 (devel) Variants: clang30, clang31, clang32, clang33, clang34, clang35, debug, dragonegg30, dragonegg31, dragonegg32, dragonegg33, dragonegg34, g95, gcc44, gcc45, gcc46, gcc47, gcc48, gcc49, gfortran, llvm, mpich, mpich_devel, [+]no_single, [+]no_static, openmpi, openmpi_devel, python25, python26, [+]python27, python31, python32, python33, regex_match_extra, universal Description: Boost provides free portable peer-reviewed C++ libraries. The emphasis is on portable libraries which work well with the C++ Standard Library. Homepage: http://www.boost.org Library Dependencies: zlib, expat, bzip2, libiconv, icu, python27 Platforms: darwin License: Boost-1 Maintainers: nomaintainer@macports.org medusa:tmp $ clang --version Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn) Target: x86_64-apple-darwin13.0.0 Thread model: posix medusa:tmp $ clang++ -std=c++11 -stdlib=libc++ -I /opt/local/include -o threadtest threadtest.cpp -L /opt/local/lib -lboost_system-mt -lboost_thread-mt medusa:tmp $ lldb threadtest Current executable set to 'threadtest' (x86_64). (lldb) run Process 55929 launched: '/Users/andy/tmp/threadtest' (x86_64) starting enter thread exit thread finishing Process 55929 exited with status = 0 (0x00000000) (lldb) quit medusa:tmp $ }}} -- Ticket URL: <https://trac.macports.org/ticket/42496> MacPorts <http://www.macports.org/> Ports system for OS X