Skip to content

Commit d82483b

Browse files
authored
Merge pull request #3584 from mwwa/libdispatch-overlay-fixes
2 parents 55bf02e + 9e95243 commit d82483b

21 files changed

+477
-475
lines changed

apinotes/Dispatch.apinotes

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ Classes:
7272
SwiftName: __DispatchData
7373
Protocols:
7474
- Name: OS_dispatch_source
75-
SwiftName: DispatchSourceType
75+
SwiftName: DispatchSourceProtocol
7676
- Name: OS_dispatch_source_mach_send
7777
SwiftName: DispatchSourceMachSend
7878
- Name: OS_dispatch_source_mach_recv

lib/ClangImporter/MappedTypes.def

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,8 @@ MAP_STDLIB_TYPE("SInt", SignedInt, 32, "CInt", false, DoNothing)
136136
// Dispatch types.
137137
MAP_TYPE("dispatch_block_t", Block, 0, "Dispatch", "dispatch_block_t",
138138
true, DoNothing)
139+
MAP_TYPE("__swift_shims_dispatch_block_t", Block, 0, "Dispatch", "_DispatchBlock",
140+
true, DoNothing)
139141

140142
// Objective-C types.
141143
MAP_TYPE("BOOL", ObjCBool, 8, "ObjectiveC", "ObjCBool", false, DoNothing)

stdlib/public/SDK/Dispatch/Block.swift

Lines changed: 14 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
//
1111
//===----------------------------------------------------------------------===//
1212

13+
import SwiftShims
14+
1315
public struct DispatchWorkItemFlags : OptionSet, RawRepresentable {
1416
public let rawValue: UInt
1517
public init(rawValue: UInt) { self.rawValue = rawValue }
@@ -35,24 +37,19 @@ public struct DispatchWorkItemFlags : OptionSet, RawRepresentable {
3537
@available(OSX 10.10, iOS 8.0, *)
3638
public class DispatchWorkItem {
3739
internal var _block: _DispatchBlock
38-
internal var _group: DispatchGroup?
3940

40-
public init(group: DispatchGroup? = nil, qos: DispatchQoS = .unspecified, flags: DispatchWorkItemFlags = [], block: @convention(block) () -> ()) {
41-
_block = _swift_dispatch_block_create_with_qos_class(__dispatch_block_flags_t(flags.rawValue),
42-
qos.qosClass.rawValue, Int32(qos.relativePriority), block)
41+
public init(qos: DispatchQoS = .unspecified, flags: DispatchWorkItemFlags = [], block: @convention(block) () -> ()) {
42+
_block = _swift_dispatch_block_create_with_qos_class(flags.rawValue,
43+
qos.qosClass.rawValue.rawValue, Int32(qos.relativePriority), block)
4344
}
4445

4546
// Used by DispatchQueue.synchronously<T> to provide a @noescape path through
4647
// dispatch_block_t, as we know the lifetime of the block in question.
4748
internal init(flags: DispatchWorkItemFlags = [], noescapeBlock: @noescape () -> ()) {
48-
_block = _swift_dispatch_block_create_noescape(__dispatch_block_flags_t(flags.rawValue), noescapeBlock)
49+
_block = _swift_dispatch_block_create_noescape(flags.rawValue, noescapeBlock)
4950
}
5051

5152
public func perform() {
52-
if let g = _group {
53-
g.enter()
54-
defer { g.leave() }
55-
}
5653
_block()
5754
}
5855

@@ -61,14 +58,19 @@ public class DispatchWorkItem {
6158
}
6259

6360
public func wait(timeout: DispatchTime) -> DispatchTimeoutResult {
64-
return _swift_dispatch_block_wait(_block, timeout.rawValue) == 0 ? .Success : .TimedOut
61+
return _swift_dispatch_block_wait(_block, timeout.rawValue) == 0 ? .success : .timedOut
6562
}
6663

6764
public func wait(wallTimeout: DispatchWallTime) -> DispatchTimeoutResult {
68-
return _swift_dispatch_block_wait(_block, wallTimeout.rawValue) == 0 ? .Success : .TimedOut
65+
return _swift_dispatch_block_wait(_block, wallTimeout.rawValue) == 0 ? .success : .timedOut
6966
}
7067

71-
public func notify(qos: DispatchQoS = .unspecified, flags: DispatchWorkItemFlags = [], queue: DispatchQueue, execute: @convention(block) () -> Void) {
68+
public func notify(
69+
qos: DispatchQoS = .unspecified,
70+
flags: DispatchWorkItemFlags = [],
71+
queue: DispatchQueue,
72+
execute: @convention(block) () -> Void)
73+
{
7274
if qos != .unspecified || !flags.isEmpty {
7375
let item = DispatchWorkItem(qos: qos, flags: flags, block: execute)
7476
_swift_dispatch_block_notify(_block, queue, item._block)
@@ -90,42 +92,9 @@ public class DispatchWorkItem {
9092
}
9193
}
9294

93-
@available(OSX 10.10, iOS 8.0, *)
94-
public extension DispatchWorkItem {
95-
@available(*, deprecated, renamed: "DispatchWorkItem.wait(self:wallTimeout:)")
96-
public func wait(timeout: DispatchWallTime) -> Int {
97-
switch wait(wallTimeout: timeout) {
98-
case .Success: return 0
99-
case .TimedOut: return Int(KERN_OPERATION_TIMED_OUT)
100-
}
101-
}
102-
}
103-
10495
/// The dispatch_block_t typealias is different from usual closures in that it
10596
/// uses @convention(block). This is to avoid unnecessary bridging between
10697
/// C blocks and Swift closures, which interferes with dispatch APIs that depend
10798
/// on the referential identity of a block. Particularly, dispatch_block_create.
10899
internal typealias _DispatchBlock = @convention(block) () -> Void
109100

110-
/// APINotes also removes the old dispatch_block_t typedef from the Dispatch module
111-
/// completely. In doing so it causes the dispatch_block_* API to lose their
112-
/// @convention(block) attributes. As such, all of the entry points are shimmed
113-
//// through Dispatch.mm with _DispatchBlock types.
114-
@_silgen_name("_swift_dispatch_block_create_with_qos_class")
115-
internal func _swift_dispatch_block_create_with_qos_class(_ flags: __dispatch_block_flags_t, _ qos: qos_class_t, _ relativePriority: Int32, _ block: _DispatchBlock) -> _DispatchBlock
116-
117-
@_silgen_name("_swift_dispatch_block_create_noescape")
118-
internal func _swift_dispatch_block_create_noescape(_ flags: __dispatch_block_flags_t, _ block: @noescape () -> ()) -> _DispatchBlock
119-
120-
@_silgen_name("_swift_dispatch_block_wait")
121-
internal func _swift_dispatch_block_wait(_ block: _DispatchBlock, _ timeout: UInt64) -> Int
122-
123-
@_silgen_name("_swift_dispatch_block_notify")
124-
internal func _swift_dispatch_block_notify(_ block: _DispatchBlock, _ queue: DispatchQueue, _ notifier: _DispatchBlock)
125-
126-
@_silgen_name("_swift_dispatch_block_cancel")
127-
internal func _swift_dispatch_block_cancel(_ block: _DispatchBlock)
128-
129-
@_silgen_name("_swift_dispatch_block_testcancel")
130-
internal func _swift_dispatch_block_testcancel(_ block: _DispatchBlock) -> Int
131-

stdlib/public/SDK/Dispatch/Data.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,3 +300,4 @@ internal func _dispatch_data_destructor_munmap() -> _DispatchBlock
300300

301301
@_silgen_name("_swift_dispatch_data_destructor_default")
302302
internal func _dispatch_data_destructor_default() -> _DispatchBlock
303+

stdlib/public/SDK/Dispatch/Dispatch.mm

Lines changed: 0 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,6 @@ static void _dispatch_overlay_constructor() {
5757
return DISPATCH_QUEUE_CONCURRENT;
5858
}
5959

60-
SWIFT_CC(swift) DISPATCH_RUNTIME_STDLIB_INTERFACE
61-
extern "C" void
62-
_swift_dispatch_apply_current(size_t iterations, __attribute__((__noescape__)) void (^block)(size_t)) {
63-
dispatch_apply(iterations, (dispatch_queue_t _Nonnull)0, block);
64-
}
65-
6660
SWIFT_CC(swift) DISPATCH_RUNTIME_STDLIB_INTERFACE
6761
extern "C" dispatch_queue_t
6862
_swift_dispatch_get_main_queue(void) {
@@ -93,66 +87,12 @@ static void _dispatch_overlay_constructor() {
9387
return _dispatch_data_destructor_munmap;
9488
}
9589

96-
SWIFT_CC(swift) DISPATCH_RUNTIME_STDLIB_INTERFACE
97-
extern "C" dispatch_block_t
98-
_swift_dispatch_block_create_with_qos_class(dispatch_block_flags_t flags, qos_class_t qos, int relative_priority, dispatch_block_t block) {
99-
return dispatch_block_create_with_qos_class(flags, qos, relative_priority, block);
100-
}
101-
102-
SWIFT_CC(swift) DISPATCH_RUNTIME_STDLIB_INTERFACE
103-
extern "C" dispatch_block_t
104-
_swift_dispatch_block_create_noescape(dispatch_block_flags_t flags, dispatch_block_t block) {
105-
return dispatch_block_create(flags, block);
106-
}
107-
108-
SWIFT_CC(swift) DISPATCH_RUNTIME_STDLIB_INTERFACE
109-
extern "C" void
110-
_swift_dispatch_block_cancel(dispatch_block_t block) {
111-
dispatch_block_cancel(block);
112-
}
113-
114-
SWIFT_CC(swift) DISPATCH_RUNTIME_STDLIB_INTERFACE
115-
extern "C" long
116-
_swift_dispatch_block_wait(dispatch_block_t block, dispatch_time_t timeout) {
117-
return dispatch_block_wait(block, timeout);
118-
}
119-
120-
SWIFT_CC(swift) DISPATCH_RUNTIME_STDLIB_INTERFACE
121-
extern "C" void
122-
_swift_dispatch_block_notify(dispatch_block_t block, dispatch_queue_t queue, dispatch_block_t notification_block) {
123-
dispatch_block_notify(block, queue, notification_block);
124-
}
125-
126-
SWIFT_CC(swift) DISPATCH_RUNTIME_STDLIB_INTERFACE
127-
extern "C" long
128-
_swift_dispatch_block_testcancel(dispatch_block_t block) {
129-
return dispatch_block_testcancel(block);
130-
}
131-
13290
SWIFT_CC(swift) DISPATCH_RUNTIME_STDLIB_INTERFACE
13391
extern "C" bool
13492
_swift_dispatch_data_apply(dispatch_data_t data, bool (^applier)(dispatch_data_t, size_t, const void *, size_t)) {
13593
return dispatch_data_apply(data, applier);
13694
}
13795

138-
SWIFT_CC(swift) DISPATCH_RUNTIME_STDLIB_INTERFACE
139-
extern "C" void
140-
_swift_dispatch_async(dispatch_queue_t queue, dispatch_block_t block) {
141-
dispatch_async(queue, block);
142-
}
143-
144-
SWIFT_CC(swift) DISPATCH_RUNTIME_STDLIB_INTERFACE
145-
extern "C" void
146-
_swift_dispatch_group_async(dispatch_group_t group, dispatch_queue_t queue, dispatch_block_t block) {
147-
dispatch_group_async(group, queue, block);
148-
}
149-
150-
SWIFT_CC(swift) DISPATCH_RUNTIME_STDLIB_INTERFACE
151-
extern "C" void
152-
_swift_dispatch_sync(dispatch_queue_t queue, dispatch_block_t block) {
153-
dispatch_sync(queue, block);
154-
}
155-
15696
// DISPATCH_RUNTIME_STDLIB_INTERFACE
15797
// extern "C" dispatch_queue_t
15898
// _swift_apply_current_root_queue() {

stdlib/public/SDK/Dispatch/Dispatch.swift

Lines changed: 9 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,6 @@ public struct DispatchQoS : Equatable {
5757
@available(OSX 10.10, iOS 8.0, *)
5858
public static let `default` = DispatchQoS(qosClass: .default, relativePriority: 0)
5959

60-
@available(OSX, introduced: 10.10, deprecated: 10.10, renamed: "DispatchQoS.default")
61-
@available(iOS, introduced: 8.0, deprecated: 8.0, renamed: "DispatchQoS.default")
62-
@available(*, deprecated, renamed: "DispatchQoS.default")
63-
public static let defaultQoS = DispatchQoS.default
64-
6560
@available(OSX 10.10, iOS 8.0, *)
6661
public static let userInitiated = DispatchQoS(qosClass: .userInitiated, relativePriority: 0)
6762

@@ -80,11 +75,6 @@ public struct DispatchQoS : Equatable {
8075
@available(OSX 10.10, iOS 8.0, *)
8176
case `default`
8277

83-
@available(OSX, introduced: 10.10, deprecated: 10.10, renamed: "QoSClass.default")
84-
@available(iOS, introduced: 8.0, deprecated: 8.0, renamed: "QoSClass.default")
85-
@available(*, deprecated, renamed: "QoSClass.default")
86-
static let defaultQoS = QoSClass.default
87-
8878
@available(OSX 10.10, iOS 8.0, *)
8979
case userInitiated
9080

@@ -94,8 +84,8 @@ public struct DispatchQoS : Equatable {
9484
case unspecified
9585

9686
@available(OSX 10.10, iOS 8.0, *)
97-
internal init?(qosClass: qos_class_t) {
98-
switch qosClass {
87+
public init?(rawValue: qos_class_t) {
88+
switch rawValue {
9989
case QOS_CLASS_BACKGROUND: self = .background
10090
case QOS_CLASS_UTILITY: self = .utility
10191
case QOS_CLASS_DEFAULT: self = .default
@@ -107,7 +97,7 @@ public struct DispatchQoS : Equatable {
10797
}
10898

10999
@available(OSX 10.10, iOS 8.0, *)
110-
internal var rawValue: qos_class_t {
100+
public var rawValue: qos_class_t {
111101
switch self {
112102
case .background: return QOS_CLASS_BACKGROUND
113103
case .utility: return QOS_CLASS_UTILITY
@@ -132,8 +122,8 @@ public func ==(a: DispatchQoS, b: DispatchQoS) -> Bool {
132122
///
133123

134124
public enum DispatchTimeoutResult {
135-
case Success
136-
case TimedOut
125+
case success
126+
case timedOut
137127
}
138128

139129
/// dispatch_group
@@ -158,21 +148,11 @@ public extension DispatchGroup {
158148
}
159149

160150
public func wait(timeout: DispatchTime) -> DispatchTimeoutResult {
161-
return __dispatch_group_wait(self, timeout.rawValue) == 0 ? .Success : .TimedOut
151+
return __dispatch_group_wait(self, timeout.rawValue) == 0 ? .success : .timedOut
162152
}
163153

164154
public func wait(wallTimeout timeout: DispatchWallTime) -> DispatchTimeoutResult {
165-
return __dispatch_group_wait(self, timeout.rawValue) == 0 ? .Success : .TimedOut
166-
}
167-
}
168-
169-
public extension DispatchGroup {
170-
@available(*, deprecated, renamed: "DispatchGroup.wait(self:wallTimeout:)")
171-
public func wait(walltime timeout: DispatchWallTime) -> Int {
172-
switch wait(wallTimeout: timeout) {
173-
case .Success: return 0
174-
case .TimedOut: return Int(KERN_OPERATION_TIMED_OUT)
175-
}
155+
return __dispatch_group_wait(self, timeout.rawValue) == 0 ? .success : .timedOut
176156
}
177157
}
178158

@@ -189,20 +169,11 @@ public extension DispatchSemaphore {
189169
}
190170

191171
public func wait(timeout: DispatchTime) -> DispatchTimeoutResult {
192-
return __dispatch_semaphore_wait(self, timeout.rawValue) == 0 ? .Success : .TimedOut
172+
return __dispatch_semaphore_wait(self, timeout.rawValue) == 0 ? .success : .timedOut
193173
}
194174

195175
public func wait(wallTimeout: DispatchWallTime) -> DispatchTimeoutResult {
196-
return __dispatch_semaphore_wait(self, wallTimeout.rawValue) == 0 ? .Success : .TimedOut
176+
return __dispatch_semaphore_wait(self, wallTimeout.rawValue) == 0 ? .success : .timedOut
197177
}
198178
}
199179

200-
public extension DispatchSemaphore {
201-
@available(*, deprecated, renamed: "DispatchSemaphore.wait(self:wallTimeout:)")
202-
public func wait(walltime timeout: DispatchWalltime) -> Int {
203-
switch wait(wallTimeout: timeout) {
204-
case .Success: return 0
205-
case .TimedOut: return Int(KERN_OPERATION_TIMED_OUT)
206-
}
207-
}
208-
}

stdlib/public/SDK/Dispatch/IO.swift

Lines changed: 2 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ public extension DispatchIO {
3838
}
3939
}
4040

41-
public class func write(fromFileDescriptor: Int32, data: DispatchData, runningHandlerOn queue: DispatchQueue, handler: (data: DispatchData?, error: Int32) -> Void) {
42-
__dispatch_write(fromFileDescriptor, data as __DispatchData, queue) { (data: __DispatchData?, error: Int32) in
41+
public class func write(toFileDescriptor: Int32, data: DispatchData, runningHandlerOn queue: DispatchQueue, handler: (data: DispatchData?, error: Int32) -> Void) {
42+
__dispatch_write(toFileDescriptor, data as __DispatchData, queue) { (data: __DispatchData?, error: Int32) in
4343
handler(data: data.flatMap { DispatchData(data: $0) }, error: error)
4444
}
4545
}
@@ -94,34 +94,3 @@ public extension DispatchIO {
9494
}
9595
}
9696

97-
extension DispatchIO {
98-
@available(*, deprecated, renamed: "DispatchIO.read(fromFileDescriptor:maxLength:runningHandlerOn:handler:)")
99-
public class func read(fd: Int32, length: Int, queue: DispatchQueue, handler: (DispatchData, Int32) -> Void) {
100-
DispatchIO.read(fromFileDescriptor: fd, maxLength: length, runningHandlerOn: queue, handler: handler)
101-
}
102-
103-
@available(*, deprecated, renamed: "DispatchIO.write(fromFileDescriptor:data:runningHandlerOn:handler:)")
104-
public class func write(fd: Int32, data: DispatchData, queue: DispatchQueue, handler: (DispatchData?, Int32) -> Void) {
105-
DispatchIO.write(fromFileDescriptor: fd, data: data, runningHandlerOn: queue, handler: handler)
106-
}
107-
108-
@available(*, deprecated, renamed: "DispatchIO.barrier(self:execute:)")
109-
public func withBarrier(barrier work: () -> ()) {
110-
barrier(execute: work)
111-
}
112-
113-
@available(*, deprecated, renamed: "DispatchIO.setLimit(self:highWater:)")
114-
public func setHighWater(highWater: Int) {
115-
setLimit(highWater: highWater)
116-
}
117-
118-
@available(*, deprecated, renamed: "DispatchIO.setLimit(self:lowWater:)")
119-
public func setLowWater(lowWater: Int) {
120-
setLimit(lowWater: lowWater)
121-
}
122-
123-
@available(*, deprecated, renamed: "DispatchIO.setInterval(self:interval:flags:)")
124-
public func setInterval(interval: UInt64, flags: IntervalFlags) {
125-
setInterval(interval: .nanoseconds(Int(interval)), flags: flags)
126-
}
127-
}

0 commit comments

Comments
 (0)