Description
Previous ID | SR-15133 |
Radar | rdar://problem/82535083 |
Original Reporter | @mickeyl |
Type | Bug |
Environment
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
https://github.com/mickeyl/swift-bugs/tree/main/SR15133
Running it from within Xcode crashes with the following backtrace:
(lldb) bt
-
thread Linux port hdd cp1 #3, queue = 'com.apple.root.default-qos.cooperative', stop reason = EXC_BREAKPOINT (code=1, subcode=0x100624d9c)
frame #0: 0x0000000100624d9c libdispatch.dylib`_dispatch_queue_xref_dispose.cold.2 + 36
frame Typos #1: 0x00000001005ea2ec libdispatch.dylib`_dispatch_queue_xref_dispose + 64
frame Update autotools buildsystem for libdispatch-500.1.5 and testsuite #2: 0x00000001005e17f8 libdispatch.dylib`-[OS_dispatch_source _xref_dispose] + 28
frame Linux port hdd cp1 #3: 0x00000001000060f8 SR15133`StreamCommand.deinit(self=0x0000000105105820) at StreamCommandQueue.swift:0
frame Fix Typos #4: 0x0000000100006120 SR15133`StreamCommand.__deallocating_deinit(self=0x0000000105105820) at StreamCommandQueue.swift:0
frame libdispatch now builds on Linux and ping/pong test runs successfully. #5: 0x00000001a2f6b774 libswiftCore.dylib`_swift_release_dealloc + 56 -
frame Add & use DISPATCH_NOESCAPE attribute macro #6: 0x00000001000081bc SR15133`StreamCommandQueue.handleErrorCondition(stream=0x0000000100712b90, event=.errorOccurred, self=0x0000000100712e90) at StreamCommandQueue.swift:182:9
frame Add the download command of the library that libdispatch depends #7: 0x0000000100009040 SR15133`closure Linux port hdd cp1 #3 in StreamCommandQueue.stream(self=0x0000000100712e90, aStream=0x0000000100712b90, eventCode=.errorOccurred) at StreamCommandQueue.swift:202:44
frame Linux port hdd timers2 #8: 0x000000010000ac48 SR15133`partial apply for closure Linux port hdd cp1 #3 in StreamCommandQueue.stream(_:handle🙂 at <compiler-generated>:0
frame enable subdir-objects for automake #9: 0x0000000100005d5c SR15133`thunk for @escaping @callee_guaranteed @sendable @async () -> () at <compiler-generated>:0
frame Clang and linux portability fixes #10: 0x000000010000ad9c SR15133`thunk for @escaping @callee_guaranteed @sendable @async () -> ()partial apply at <compiler-generated>:0
frame Add some details on current build steps for Linux. #11: 0x000000010000bfac SR15133`thunk for @escaping @callee_guaranteed @sendable @async () -> (@out A) at <compiler-generated>:0
frame Add AC_SEARCH_LIBS stanzas for kqueue and pthread_workqueue #12: 0x000000010000cc5c SR15133`partial apply for thunk for @escaping @callee_guaranteed @sendable @async () -> (@out A) at <compiler-generated>:0
(lldb)
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.