Skip to content

Crash with NIOLockedValueBox #3202

@0xTim

Description

@0xTim

Expected behavior

It does not crash

Actual behavior

It crashes with EXC_BAD_ACCESS. See vapor/vapor#3302 for more details

Steps to reproduce

  1. git clone https://github.com/vapor/vapor
  2. cd vapor
  3. git switch nio-lockedvaluebox-crash
  4. swift test --filter testRepeatedAccessCausesNoStackOverflow

SwiftNIO version/commit hash

2.81.0

System & version information

Swift 6.1, macOS 15.4

Backtrace

(lldb) bt
* thread #7, name = 'NIO-SGLTN-0-#1', stop reason = EXC_BAD_ACCESS (code=2, address=0x1700bffe0)
    frame #0: 0x000000019cfdb9e0 dyld`mach_o::Platform::Platform(unsigned int) + 4
    frame #1: 0x000000019cf9420c dyld`dyld4::APIs::dyld_get_base_platform(unsigned int) + 40
    frame #2: 0x000000019d01328c libxpc.dylib`_availability_version_check + 40
    frame #3: 0x00000001aebb31ac libswiftCore.dylib`__isPlatformVersionAtLeast + 92
    frame #4: 0x00000001aeadca90 libswiftCore.dylib`swift::swift_slowAllocTyped(unsigned long, unsigned long, unsigned long long) + 56
    frame #5: 0x00000001aeadcf90 libswiftCore.dylib`_swift_allocObject_ + 1100
    frame #6: 0x000000010a4fe76c VaporTests`closure #1 in ServiceTests.testRepeatedAccessCausesNoStackOverflow(_0=0x0000600002a3c230, myFakeService=VaporTests.MyTestService @ 0x0000600001429150) at ServiceTests.swift:0
    frame #13295: 0x000000010b830208 VaporTests`Application.Service.service.getter() at Service.swift:46:20
  * frame #13296: 0x000000010a4fe8a4 VaporTests`closure #2 in ServiceTests.testRepeatedAccessCausesNoStackOverflow(app=0x0000600002a3c230) at ServiceTests.swift:95:48
    frame #13299: 0x000000010a8f900c VaporTests`closure #1 in EventLoopFuture.whenSuccess(, callback=0x000000010a9042f8 VaporTests`partial apply forwarder for reabstraction thunk helper <A><A1> from @escaping @callee_guaranteed @Sendable (@in_guaranteed A) -> (@out ()) to @escaping @callee_guaranteed @Sendable (@in_guaranteed A) -> () at <compiler-generated>) at EventLoopFuture.swift:836:17
    frame #13300: 0x000000010a8f5a8c VaporTests`EventLoopFuture._addCallback(callback=0x000000010a904360 VaporTests`partial apply forwarder for closure #1 @Sendable () -> NIOCore.CallbackList in NIOCore.EventLoopFuture.whenSuccess((A) -> ()) -> () at <compiler-generated>) at EventLoopFuture.swift:791:16
    frame #13301: 0x000000010a8f8cf8 VaporTests`EventLoopFuture._whenCompleteIsolated(callback=0x000000010a904360 VaporTests`partial apply forwarder for closure #1 @Sendable () -> NIOCore.CallbackList in NIOCore.EventLoopFuture.whenSuccess((A) -> ()) -> () at <compiler-generated>) at EventLoopFuture.swift:818:14
    frame #13302: 0x000000010a8f8d98 VaporTests`closure #1 in EventLoopFuture._internalWhenComplete(, callback=0x000000010a904360 VaporTests`partial apply forwarder for closure #1 @Sendable () -> NIOCore.CallbackList in NIOCore.EventLoopFuture.whenSuccess((A) -> ()) -> () at <compiler-generated>) at EventLoopFuture.swift:809:22
    frame #13303: 0x000000010aa2692c VaporTests`closure #1 in SelectableEventLoop.run(task=(function = 0x000000010a904500 VaporTests`partial apply forwarder for closure #1 @Sendable () -> () in NIOCore.EventLoopFuture._internalWhenComplete(@Sendable () -> NIOCore.CallbackList) -> () at <compiler-generated>)) at SelectableEventLoop.swift:590:17
    frame #13305: 0x000000010aa2095c VaporTests`closure #1 in withAutoReleasePool<()>(execute=0x000000010aa2d458 VaporTests`partial apply forwarder for closure #1 () -> () in NIOPosix.SelectableEventLoop.run(NIOPosix.UnderlyingTask) -> () at <compiler-generated>) at SelectableEventLoop.swift:43:13
    frame #13308: 0x000000010aa208d0 VaporTests`withAutoReleasePool<()>(execute=0x000000010aa2d458 VaporTests`partial apply forwarder for closure #1 () -> () in NIOPosix.SelectableEventLoop.run(NIOPosix.UnderlyingTask) -> () at <compiler-generated>) at SelectableEventLoop.swift:42:16
    frame #13309: 0x000000010aa26824 VaporTests`SelectableEventLoop.run(task=(function = 0x000000010a904500 VaporTests`partial apply forwarder for closure #1 @Sendable () -> () in NIOCore.EventLoopFuture._internalWhenComplete(@Sendable () -> NIOCore.CallbackList) -> () at <compiler-generated>)) at SelectableEventLoop.swift:587:9
    frame #13310: 0x000000010aa27e60 VaporTests`SelectableEventLoop.runLoop(selfIdentifier=ObjectIdentifier(0x0000600003438000 -> 0x000000010bc22c20 type metadata for NIOPosix.SelectableEventLoop)) at SelectableEventLoop.swift:764:22
    frame #13311: 0x000000010aa28790 VaporTests`SelectableEventLoop.run() at SelectableEventLoop.swift:877:33
    frame #13312: 0x000000010a9d257c VaporTests`static MultiThreadedEventLoopGroup.runTheLoop(thread=0x0000600000f217a0, parentGroup=0x00006000022308c0, canEventLoopBeShutdownIndividually=false, selectorFactory=0x000000010a9d31f4 VaporTests`implicit closure #1 @Sendable () throws -> NIOPosix.Selector<NIOPosix.NIORegistration> in static NIOPosix.MultiThreadedEventLoopGroup._makePerpetualGroup(threadNamePrefix: Swift.String, numberOfThreads: Swift.Int) -> NIOPosix.MultiThreadedEventLoopGroup at MultiThreadedEventLoopGroup.swift, initializer=0x000000010a9dac8c VaporTests`partial apply forwarder for reabstraction thunk helper from @escaping @callee_guaranteed (@in_guaranteed NIOPosix.NIOThread) -> (@out ()) to @escaping @callee_guaranteed (@guaranteed NIOPosix.NIOThread) -> () at <compiler-generated>, metricsDelegate=nil, callback=0x000000010a9dacdc VaporTests`partial apply forwarder for closure #1 (NIOPosix.SelectableEventLoop) -> () in closure #1 (NIOPosix.NIOThread) -> () in static NIOPosix.MultiThreadedEventLoopGroup.setupThreadAndEventLoop(name: Swift.String, parentGroup: NIOPosix.MultiThreadedEventLoopGroup, selectorFactory: () throws -> NIOPosix.Selector<NIOPosix.NIORegistration>, initializer: (NIOPosix.NIOThread) -> (), metricsDelegate: Swift.Optional<NIOPosix.NIOEventLoopMetricsDelegate>) -> NIOPosix.SelectableEventLoop at <compiler-generated>) at MultiThreadedEventLoopGroup.swift:105:22
    frame #13313: 0x000000010a9d2bf0 VaporTests`closure #1 in static MultiThreadedEventLoopGroup.setupThreadAndEventLoop(t=0x0000600000f217a0, parentGroup=0x00006000022308c0, selectorFactory=0x000000010a9d31f4 VaporTests`implicit closure #1 @Sendable () throws -> NIOPosix.Selector<NIOPosix.NIORegistration> in static NIOPosix.MultiThreadedEventLoopGroup._makePerpetualGroup(threadNamePrefix: Swift.String, numberOfThreads: Swift.Int) -> NIOPosix.MultiThreadedEventLoopGroup at MultiThreadedEventLoopGroup.swift, initializer=0x000000010a9dac8c VaporTests`partial apply forwarder for reabstraction thunk helper from @escaping @callee_guaranteed (@in_guaranteed NIOPosix.NIOThread) -> (@out ()) to @escaping @callee_guaranteed (@guaranteed NIOPosix.NIOThread) -> () at <compiler-generated>, metricsDelegate=nil, lock=0x0000600000f21ad0, _loop=0x0000600003438000) at MultiThreadedEventLoopGroup.swift:126:41
    frame #13316: 0x000000010aa5fddc VaporTests`closure #1 in closure #1 in static ThreadOpsPosix.run($0=0x600000f21b90) at ThreadPosix.swift:153:21
    frame #13318: 0x000000019d301c0c libsystem_pthread.dylib`_pthread_start + 136

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