boostorg / thread

Boost.org thread module
http://boost.org/libs/thread
201 stars 161 forks source link

Crash in try_join_for on mac #384

Open moneromooo-monero opened 1 year ago

moneromooo-monero commented 1 year ago

Works fine on Linux and Windows. I'm on Linux, where it's valgrind and ASAN clean. Both boost 1.81 and master. This reproducer

#include "boost/thread.hpp"

int main()
{
  boost::chrono::milliseconds ms(2000);
  auto b = boost::thread([](){ sleep(2); });
  b.try_join_for(ms);
  return 0;
}

crashes on mac for someone else. After various blind attempts at debugging, the crashes goes if adding "cxxflags=-std=c++14" to the ./b2 command line.

The command line causing a crash in the sample above is:

./bootstrap.sh clang
./b2 install --prefix=/Users/X/dev/prefix/ --build-dir=/Users/X/dev/boost/somewhere/ --without-mpi --without-python --without-iostreams --without-graph --without-graph_parallel --without-coroutine --without-fiber --without-log --without-math --without-random --without-stacktrace --without-test --without-type_erasure --without-wave --without-context --without-contract --no-cmake-config --layout=system address-model=64 variant=release link=static

This b2 command line instead fixes the crash:

./b2 install --prefix=/Users/X/dev/prefix/ --build-dir=/Users/X/dev/boost/somewhere/ --without-mpi --without-python --without-iostreams --without-graph --without-graph_parallel --without-coroutine --without-fiber --without-log --without-math --without-random --without-stacktrace --without-test --without-type_erasure --without-wave --without-context --without-contract --no-cmake-config --layout=system address-model=64 variant=release link=static cxxflags=-std=c++14

The stack trace for the crash:

Process:               a.out [X]
Path:                  /Users/USER/*/a.out
Identifier:            a.out
Version:               0
Code Type:             X86-64 (Native)
Parent Process:        X
Responsible:           X
User ID:               X

Date/Time:             X
OS Version:            macOS 11.6.8 (20G730)
Report Version:        12
Anonymous UUID:        X

Sleep/Wake UUID:       X

Time Awake Since Boot: X
Time Since Wake:       X

System Integrity Protection: enabled

Crashed Thread:        0  Dispatch queue: com.apple.main-thread

Exception Type:        EXC_BAD_ACCESS (SIGSEGV)
Exception Codes:       KERN_INVALID_ADDRESS at 0x00002af7713088dc
Exception Note:        EXC_CORPSE_NOTIFY

Termination Signal:    Segmentation fault: 11
Termination Reason:    Namespace SIGNAL, Code 0xb
Terminating Process:   exc handler [46102]

VM Regions Near 0x2af7713088dc:
    __LINKEDIT                  10f174000-10f178000    [   16K] r--/r-- SM=NUL  /usr/lib/dyld
--> 
    STACK GUARD              7000061f1000-7000061f2000 [    4K] ---/rwx SM=NUL  stack guard for thread 1

Application Specific Information:
dyld2 mode

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   libsystem_pthread.dylib         0x00007fff2080bd86 pthread_mutex_lock + 4
1   a.out                           0x0000000109f0ac08 boost::mutex::lock() + 24
2   a.out                           0x0000000109f0865d boost::thread::native_handle() + 45
3   a.out                           0x0000000109f06615 boost::thread::get_id() const + 21
4   a.out                           0x0000000109f064aa boost::thread::do_try_join_until(boost::detail::real_platform_timepoint const&) + 42
5   a.out                           0x0000000109f060c2 bool boost::thread::try_join_until<boost::chrono::duration<long long, boost::ratio<1l, 1000000000l> > >(boost::chrono::time_point<boost::chrono::system_clock, boost::chrono::duration<long long, boost::ratio<1l, 1000000000l> > > const&) + 50
6   a.out                           0x0000000109f05daf bool boost::thread::try_join_until<boost::chrono::steady_clock, boost::chrono::duration<long long, boost::ratio<1l, 1000000000l> > >(boost::chrono::time_point<boost::chrono::steady_clock, boost::chrono::duration<long long, boost::ratio<1l, 1000000000l> > > const&) + 415
7   a.out                           0x0000000109eff8bf bool boost::thread::try_join_for<long long, boost::ratio<1l, 1000l> >(boost::chrono::duration<long long, boost::ratio<1l, 1000l> > const&) + 63
8   a.out                           0x0000000109eff808 main + 56
9   libdyld.dylib                   0x00007fff2082bf3d start + 1

Thread 1:
0   dyld                            0x000000010f07ced4 ImageLoaderMachO::libPath(unsigned int) const + 34
1   dyld                            0x000000010f07ca6d ImageLoaderMachO::findExportedSymbol(char const*, bool, char const*, ImageLoader const**) const + 147
2   dyld                            0x000000010f0750bb ImageLoader::findExportedSymbolAddress(ImageLoader::LinkContext const&, char const*, ImageLoader const*, int, bool, ImageLoader const**, unsigned long*) const + 47
3   dyld                            0x000000010f083ad9 ImageLoaderMachOCompressed::resolveTwolevel(ImageLoader::LinkContext const&, char const*, ImageLoader const*, ImageLoader const*, unsigned int, bool, bool, ImageLoader const**) + 89
4   dyld                            0x000000010f083d6b ImageLoaderMachOCompressed::resolve(ImageLoader::LinkContext const&, char const*, unsigned char, long, ImageLoader const**, DyldSharedCache::DataConstLazyScopedWriter&, ImageLoaderMachOCompressed::LastLookup*, bool) + 299
5   dyld                            0x000000010f0873c1 ImageLoaderMachOCompressed::doBindFastLazySymbol(unsigned int, ImageLoader::LinkContext const&, void (*)(), void (*)()) + 321
6   dyld                            0x000000010f06554b dyld::fastBindLazySymbol(ImageLoader**, unsigned long) + 86
7   libdyld.dylib                   0x00007fff2082ace8 _dyld_fast_stub_entry(void*, long) + 65
8   libdyld.dylib                   0x00007fff2082ac26 dyld_stub_binder + 282
9   ???                             0x0000000109f15550 0 + 4461778256
10  a.out                           0x0000000109f073d9 boost::(anonymous namespace)::thread_proxy(void*) + 121
11  libsystem_pthread.dylib         0x00007fff208108fc _pthread_start + 224
12  libsystem_pthread.dylib         0x00007fff2080c443 thread_start + 15

Thread 0 crashed with X86 Thread State (64-bit):
  rax: 0x000000010f137e00  rbx: 0x00002af7713088dc  rcx: 0x000000010f137e00  rdx: 0x00000000222a9598
  rdi: 0x00002af7713088dc  rsi: 0x000000010f137e00  rbp: 0x00007ffee5d026b0  rsp: 0x00007ffee5d026b0
   r8: 0x00002af771309dd9   r9: 0x000000000d413abc  r10: 0x0000000000000020  r11: 0x00007fff2080bd82
  r12: 0x0000000000000000  r13: 0x0000000000000000  r14: 0x00002af7713088dc  r15: 0x00007faa29c05b30
  rip: 0x00007fff2080bd86  rfl: 0x0000000000010206  cr2: 0x00002af7713088dc

Logical CPU:     6
Error Code:      0x00000004 (no mapping for user data read)
Trap Number:     14

Thread 0 instruction stream:
  48 89 f3 49 89 fe 48 8d-3d d1 ed 2f 60 be 00 00  H..I..H.=../`...
  05 00 e8 3d 7e 00 00 b8-00 01 00 00 48 8d 0d c7  ...=~.......H...
  ed 2f 60 48 83 3c c1 00-74 12 48 ff c0 48 3d 00  ./`H.<..t.H..H=.
  03 00 00 75 ee bb 23 00-00 00 eb 0c 48 f7 d3 48  ...u..#.....H..H
  89 1c c1 49 89 06 31 db-48 8d 3d 8f ed 2f 60 e8  ...I..1.H.=../`.
  06 7e 00 00 89 d8 5b 41-5e 5d c3 90 55 48 89 e5  .~....[A^]..UH..
 [48]81 3f 5a 54 55 4d 75-73 8b 47 0c 89 c1 81 e1  H.?ZTUMus.G..... <==
  c0 01 00 00 83 f9 40 74-6b 0f ba e0 0e 72 6d 48  ......@tk....rmH
  8d 57 27 48 83 e2 f8 48-8b 0a f6 c1 02 75 45 4c  .W'H...H.....uEL
  8d 57 1f 49 83 e2 f8 65-4c 8b 04 25 f8 ff ff ff  .W.I...eL..%....
  49 b9 00 00 00 00 ff ff-ff ff 48 89 ce f6 c1 02  I.........H.....
  75 22 4c 21 ce 89 c8 48-09 f0 83 c9 02 48 09 f1  u"L!...H.....H..

Thread 0 last branch register state not available.

Binary Images:
       0x109efd000 -        0x109f10fff +a.out (0) <96252B97-E2CF-3A1A-AD77-5B71070B45B0> /Users/USER/*/a.out
       0x10f060000 -        0x10f0fbfff  dyld (852.2) <E20C43E3-CEB9-397A-9056-11A6A8D3F86E> /usr/lib/dyld
    0x7fff20548000 -     0x7fff20549fff  libsystem_blocks.dylib (79) <4DF6D8F5-D9C2-3A96-8DE4-5E99D6B73DC8> /usr/lib/system/libsystem_blocks.dylib
    0x7fff2054a000 -     0x7fff2057ffff  libxpc.dylib (2038.120.1) <0397FC9F-BD11-31FC-882E-9EDAA1E5CA65> /usr/lib/system/libxpc.dylib
    0x7fff20580000 -     0x7fff20597fff  libsystem_trace.dylib (1277.120.1) <0A24EB90-5396-36B0-A7E6-E9288702856D> /usr/lib/system/libsystem_trace.dylib
    0x7fff20598000 -     0x7fff20635fff  libcorecrypto.dylib (1000.140.4) <57E7471E-3960-3398-8918-20DF446EA99B> /usr/lib/system/libcorecrypto.dylib
    0x7fff20636000 -     0x7fff20662fff  libsystem_malloc.dylib (317.140.5) <10C22FD0-FC7B-3325-852E-FEC4E88D2BC5> /usr/lib/system/libsystem_malloc.dylib
    0x7fff20663000 -     0x7fff206a7fff  libdispatch.dylib (1271.120.2) <BA7AD614-F2C2-3E89-9043-43DD548AE5B1> /usr/lib/system/libdispatch.dylib
    0x7fff206a8000 -     0x7fff206e1fff  libobjc.A.dylib (824.1) <A598DA89-FF71-37BF-B954-26277541D859> /usr/lib/libobjc.A.dylib
    0x7fff206e2000 -     0x7fff206e4fff  libsystem_featureflags.dylib (28.60.1) <6EB33926-8E22-3000-B2F1-C6182B8CBD8F> /usr/lib/system/libsystem_featureflags.dylib
    0x7fff206e5000 -     0x7fff2076dfff  libsystem_c.dylib (1439.141.1) <8447A4B8-0751-3EF1-AA9B-042E40EFA07D> /usr/lib/system/libsystem_c.dylib
    0x7fff2076e000 -     0x7fff207c3fff  libc++.1.dylib (905.6) <81674ADB-670F-3B19-AF5D-F3F66CB93D44> /usr/lib/libc++.1.dylib
    0x7fff207c4000 -     0x7fff207d9fff  libc++abi.dylib (905.6) <78CE7863-E224-3D0B-98F1-E5E3E382322D> /usr/lib/libc++abi.dylib
    0x7fff207da000 -     0x7fff20809fff  libsystem_kernel.dylib (7195.141.32) <70F8035C-BC80-38BA-82CC-A8856CEA0133> /usr/lib/system/libsystem_kernel.dylib
    0x7fff2080a000 -     0x7fff20815fff  libsystem_pthread.dylib (454.120.2) <49670AEC-4D5D-3383-906C-23F568351FCB> /usr/lib/system/libsystem_pthread.dylib
    0x7fff20816000 -     0x7fff20851fff  libdyld.dylib (852.2) <5FBD0E1A-ACCE-36DB-B11C-622F26C85132> /usr/lib/system/libdyld.dylib
    0x7fff20852000 -     0x7fff2085bfff  libsystem_platform.dylib (254.80.2) <A85D12B6-6213-34EE-84D8-8E993C19E330> /usr/lib/system/libsystem_platform.dylib
    0x7fff2085c000 -     0x7fff20887fff  libsystem_info.dylib (542.40.4) <E757523E-5882-3CED-A3EF-E5A574FBD1C2> /usr/lib/system/libsystem_info.dylib
    0x7fff22c58000 -     0x7fff22c61fff  libsystem_darwin.dylib (1439.141.1) <29F82ABE-E1A0-3BC2-B91E-ADC010CF23FA> /usr/lib/system/libsystem_darwin.dylib
    0x7fff23077000 -     0x7fff23082fff  libsystem_notify.dylib (279.40.4) <608B5A07-D31A-3BEC-86BF-C2E498C085AF> /usr/lib/system/libsystem_notify.dylib
    0x7fff2500f000 -     0x7fff2501dfff  libsystem_networkextension.dylib (1295.140.3) <022BE26C-C058-3CC7-8E0B-348B3D3B639C> /usr/lib/system/libsystem_networkextension.dylib
    0x7fff2507c000 -     0x7fff25092fff  libsystem_asl.dylib (385.0.2) <A5147017-3488-3B18-A11B-C19697C110FC> /usr/lib/system/libsystem_asl.dylib
    0x7fff2675a000 -     0x7fff26761fff  libsystem_symptoms.dylib (1431.140.1) <EA6435E7-8F85-315B-8AED-C20A07DE7F96> /usr/lib/system/libsystem_symptoms.dylib
    0x7fff28769000 -     0x7fff28779fff  libsystem_containermanager.dylib (318.100.4) <E0A89571-6D3E-3184-9F39-C6094C87B92B> /usr/lib/system/libsystem_containermanager.dylib
    0x7fff2947d000 -     0x7fff29480fff  libsystem_configuration.dylib (1109.140.1) <89E70992-616F-3DD3-9430-67025F759A1B> /usr/lib/system/libsystem_configuration.dylib
    0x7fff29481000 -     0x7fff29485fff  libsystem_sandbox.dylib (1441.141.7) <6C99B070-E74F-3065-8DA0-D7214DA85E23> /usr/lib/system/libsystem_sandbox.dylib
    0x7fff2a177000 -     0x7fff2a179fff  libquarantine.dylib (119.40.4) <1263FFEA-9722-39FA-A097-D28B4F7FDE04> /usr/lib/system/libquarantine.dylib
    0x7fff2a722000 -     0x7fff2a726fff  libsystem_coreservices.dylib (127.1) <7AE405FC-6A44-34A0-86AD-6BD80B0050BB> /usr/lib/system/libsystem_coreservices.dylib
    0x7fff2a936000 -     0x7fff2a97dfff  libsystem_m.dylib (3186.100.3) <EA0354A3-8618-3D76-A760-E550AC60CE95> /usr/lib/system/libsystem_m.dylib
    0x7fff2a97f000 -     0x7fff2a984fff  libmacho.dylib (980) <1FCE2BE3-4F6F-3EAA-9BC5-A9892A45CF0D> /usr/lib/system/libmacho.dylib
    0x7fff2a9a1000 -     0x7fff2a9acfff  libcommonCrypto.dylib (60178.120.3) <7E242F29-1CB6-30EF-8C9A-C768A90FDBA0> /usr/lib/system/libcommonCrypto.dylib
    0x7fff2a9ad000 -     0x7fff2a9b7fff  libunwind.dylib (201) <A5B040A8-847F-36EE-B13D-5DD1F5CD5BED> /usr/lib/system/libunwind.dylib
    0x7fff2a9b8000 -     0x7fff2a9bffff  liboah.dylib (203.58) <26D08622-69F5-32DB-80D2-9B4651A9F0CC> /usr/lib/liboah.dylib
    0x7fff2a9c0000 -     0x7fff2a9cafff  libcopyfile.dylib (173.40.2) <8C783785-0F5F-3DC5-B815-B29CEBA75737> /usr/lib/system/libcopyfile.dylib
    0x7fff2a9cb000 -     0x7fff2a9d2fff  libcompiler_rt.dylib (102.2) <1FDC92D1-8A17-30AF-8E72-4F0517AEA157> /usr/lib/system/libcompiler_rt.dylib
    0x7fff2a9d3000 -     0x7fff2a9d5fff  libsystem_collections.dylib (1439.141.1) <11D5775A-AD4C-35ED-BC05-616AB67ACBBE> /usr/lib/system/libsystem_collections.dylib
    0x7fff2a9d6000 -     0x7fff2a9d8fff  libsystem_secinit.dylib (87.60.1) <27982311-637E-3308-9F55-4871762736F4> /usr/lib/system/libsystem_secinit.dylib
    0x7fff2a9d9000 -     0x7fff2a9dbfff  libremovefile.dylib (49.120.1) <5973CED7-797B-3288-9589-C1856752F91A> /usr/lib/system/libremovefile.dylib
    0x7fff2a9dc000 -     0x7fff2a9dcfff  libkeymgr.dylib (31) <AAA929A0-45E5-3186-8ABD-37EB25B2C939> /usr/lib/system/libkeymgr.dylib
    0x7fff2a9dd000 -     0x7fff2a9e4fff  libsystem_dnssd.dylib (1310.140.1) <4A85F13B-E3AD-3C44-B327-091F56D35CC1> /usr/lib/system/libsystem_dnssd.dylib
    0x7fff2a9e5000 -     0x7fff2a9eafff  libcache.dylib (83) <435668CB-666B-3379-AD65-F604A72099F4> /usr/lib/system/libcache.dylib
    0x7fff2a9eb000 -     0x7fff2a9ecfff  libSystem.B.dylib (1292.120.1) <BF2EB42A-8928-3250-B344-00481468F0DB> /usr/lib/libSystem.B.dylib
    0x7fff2ddf0000 -     0x7fff2ddf0fff  liblaunch.dylib (2038.120.1) <A3F46CC6-BD89-39DB-8732-C885B881A635> /usr/lib/system/liblaunch.dylib
    0x7fff30287000 -     0x7fff30287fff  libsystem_product_info_filter.dylib (8.40.1) <6CA8DEA4-5BD4-375F-9AA7-3338135306C5> /usr/lib/system/libsystem_product_info_filter.dylib

External Modification Summary:
  Calls made by other processes targeting this process:
    task_for_pid: 0
    thread_create: 0
    thread_set_state: 0
  Calls made by this process:
    task_for_pid: 0
    thread_create: 0
    thread_set_state: 0
  Calls made by all processes on this machine:
    task_for_pid: 0
    thread_create: 0
    thread_set_state: 0

VM Region Summary:
ReadOnly portion of Libraries: Total=505.2M resident=0K(0%) swapped_out_or_unallocated=505.2M(100%)
Writable regions: Total=17.8M written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=17.8M(100%)

                                VIRTUAL   REGION 
REGION TYPE                        SIZE    COUNT (non-coalesced) 
===========                     =======  ======= 
Kernel Alloc Once                    8K        1 
MALLOC                            9288K        7 
MALLOC guard page                   16K        4 
STACK GUARD                       56.0M        2 
Stack                             8712K        2 
VM_ALLOCATE                          8K        2 
__DATA                             404K       43 
__DATA_CONST                       258K       34 
__DATA_DIRTY                        58K       22 
__LINKEDIT                       500.3M        5 
__OBJC_RO                         70.3M        1 
__OBJC_RW                         2496K        2 
__TEXT                            5064K       44 
shared memory                        4K        1 
===========                     =======  ======= 
TOTAL                            652.3M      170