Skip to content

mimalloc (v2, v3) immediately crashes in mi_free on MacOS #1029

Open
@Noxybot

Description

@Noxybot

MacOS 15.3.1, XCode 15.2.
Hi! I'm hitting the following issue: mimalloc seems to reliably crash our application.
The callstack is always the same:

* thread #2, stop reason = EXC_BAD_ACCESS (code=1, address=0x142000100)
  * frame #0: 0x000000010cfd5170 libmimalloc-optimized.2.dylib`mi_free(p=0x0000000143604080) at alloc.c:568:58 [opt]
    frame #1: 0x0000000180535bf8 libsystem_pthread.dylib`_pthread_tsd_cleanup + 488
    frame #2: 0x00000001805389bc libsystem_pthread.dylib`_pthread_exit + 84
    frame #3: 0x0000000180535954 libsystem_pthread.dylib`_pthread_wqthread_exit + 56
    frame #4: 0x0000000180534460 libsystem_pthread.dylib`_pthread_wqthread + 424

I suspect (and it what I've seen when I set breakpoint on "malloc") that TLS data is not allocated via mimalloc, ex:

* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.2
  * frame #0: 0x000000018055c2ec libdyld.dylib`dyld4::LibSystemHelpers::malloc(unsigned long) const
    frame #1: 0x00000001801c850c dyld`dyld4::RuntimeState::_instantiateTLVs(unsigned long) + 220
    frame #2: 0x000000018054091c libdyld.dylib`tlv_get_addr + 108
....
some code which initializes thread_local variable...
....
    frame #13: 0x00000001801cf93c dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const + 592
    frame #14: 0x000000018020da0c dyld`invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const + 172
    frame #15: 0x00000001802013a8 dyld`invocation function for block in dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const + 496
    frame #16: 0x00000001801b42dc dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void (load_command const*, bool&) block_pointer) const + 300
    frame #17: 0x000000018020033c dyld`dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const + 192
    frame #18: 0x0000000180202d10 dyld`dyld3::MachOFile::forEachInitializerPointerSection(Diagnostics&, void (unsigned int, unsigned int, bool&) block_pointer) const + 160
    frame #19: 0x000000018020d700 dyld`dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const + 432
    frame #20: 0x00000001801cf660 dyld`dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const + 176
    frame #21: 0x00000001801d6c3c dyld`dyld4::JustInTimeLoader::runInitializers(dyld4::RuntimeState&) const + 36
    frame #22: 0x00000001801cfd1c dyld`dyld4::Loader::runInitializersBottomUp(dyld4::RuntimeState&, dyld3::Array<dyld4::Loader const*>&, dyld3::Array<dyld4::Loader const*>&) const + 312
    frame #23: 0x00000001801d400c dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const::$_0::operator()() const + 180
    frame #24: 0x00000001801cff0c dyld`dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const + 412
    frame #25: 0x00000001801ef28c dyld`dyld4::APIs::runAllInitializersForMain() + 424
    frame #26: 0x00000001801b98c8 dyld`dyld4::prepare(dyld4::APIs&, dyld3::MachOAnalyzer const*) + 3268
    frame #27: 0x00000001801b8bc0 dyld`dyld4::start(dyld4::KernelArgs*, void*, void*)::$_0::operator()() const + 544
    frame #28: 0x00000001801b805c dyld`start + 2304

but still is being deallocated via mimalloc... Any ideas or suggestions here? Thanks!

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions