Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[SR-15133] Crash when deallocating a never-resumed DispatchSourceTimer #604

mickeyl opened this issue Aug 29, 2021 · 5 comments

[SR-15133] Crash when deallocating a never-resumed DispatchSourceTimer #604

mickeyl opened this issue Aug 29, 2021 · 5 comments


Copy link

@mickeyl mickeyl commented Aug 29, 2021

Previous ID SR-15133
Radar rdar://problem/82535083
Original Reporter @mickeyl
Type Bug

macOS 12 beta, Xcode 13 (13A233).

Additional Detail from JIRA
Votes 0
Component/s libdispatch
Labels Bug, DispatchSourceTimer
Assignee None
Priority Medium

md5: 61e077b082169a945b058843ee5c3245

Issue Description:

Please consider the following example program which I have uploaded to

Running it from within Xcode crashes with the following backtrace:

(lldb) bt

  • thread #3, queue = '', stop reason = EXC_BREAKPOINT (code=1, subcode=0x100624d9c)
    frame #0: 0x0000000100624d9c libdispatch.dylib`_dispatch_queue_xref_dispose.cold.2 + 36
    frame #1: 0x00000001005ea2ec libdispatch.dylib`_dispatch_queue_xref_dispose + 64
    frame #2: 0x00000001005e17f8 libdispatch.dylib`-[OS_dispatch_source _xref_dispose] + 28
    frame #3: 0x00000001000060f8 SR15133`StreamCommand.deinit(self=0x0000000105105820) at StreamCommandQueue.swift:0
    frame #4: 0x0000000100006120 SR15133`StreamCommand.__deallocating_deinit(self=0x0000000105105820) at StreamCommandQueue.swift:0
    frame #5: 0x00000001a2f6b774 libswiftCore.dylib`_swift_release_dealloc + 56

  • frame #6: 0x00000001000081bc SR15133`StreamCommandQueue.handleErrorCondition(stream=0x0000000100712b90, event=.errorOccurred, self=0x0000000100712e90) at StreamCommandQueue.swift:182:9
    frame #7: 0x0000000100009040 SR15133`closure #3 in, aStream=0x0000000100712b90, eventCode=.errorOccurred) at StreamCommandQueue.swift:202:44
    frame #8: 0x000000010000ac48 SR15133`partial apply for closure #3 in🙂 at <compiler-generated>:0
    frame #9: 0x0000000100005d5c SR15133`thunk for @escaping @callee_guaranteed @sendable @async () -> () at <compiler-generated>:0
    frame #10: 0x000000010000ad9c SR15133`thunk for @escaping @callee_guaranteed @sendable @async () -> ()partial apply at <compiler-generated>:0
    frame #11: 0x000000010000bfac SR15133`thunk for @escaping @callee_guaranteed @sendable @async () -> (@out A) at <compiler-generated>:0
    frame #12: 0x000000010000cc5c SR15133`partial apply for thunk for @escaping @callee_guaranteed @sendable @async () -> (@out A) at <compiler-generated>:0

I suspect there is a memory management problem when the stored continuation in the `StreamCommand` gets deallocated due to `self.activeCommand = nil` while the continuation may continue to run in another task.

Copy link

@mickeyl mickeyl commented Aug 29, 2021

It also crashes when running on the command line with `swift run`, btw.

Copy link

@typesanitizer typesanitizer commented Aug 30, 2021

@swift-ci create

Copy link

@mickeyl mickeyl commented Sep 21, 2021

Same in Xcode 13 release version.

Copy link

@mickeyl mickeyl commented Sep 23, 2021

On Linux w/ Swift version 5.6-dev (LLVM ca88d53176e346a, Swift a382f589a5ec230), this seems to work.

It still fails on macOS 12 with Swift development toolchain 2021-09-18.

Copy link

@mickeyl mickeyl commented Sep 27, 2021

After digging deeper, it seems that the actual crash happens when deallocating the `DispatchTimerSource`. Obviously `libdispatch` is to blame here and it has nothing to do with the continuation. I will adjust the metadata accordingly.

@swift-ci swift-ci transferred this issue from apple/swift-issues Apr 25, 2022
@shahmishal shahmishal transferred this issue from apple/swift May 5, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
None yet

No branches or pull requests

2 participants