Skip to content

Commit 684266b

Browse files
committed
DispatchQueueActor supports barriers in concurrent DispatchQueue
1 parent b24fb76 commit 684266b

File tree

1 file changed

+7
-5
lines changed

1 file changed

+7
-5
lines changed

GRDB/Core/DispatchQueueActor.swift

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ import Dispatch
66
actor DispatchQueueActor {
77
private let executor: DispatchQueueExecutor
88

9-
/// - precondition: the queue is serial.
10-
init(queue: DispatchQueue) {
11-
self.executor = DispatchQueueExecutor(queue: queue)
9+
/// - precondition: the queue is serial, or flags contains `.barrier`.
10+
init(queue: DispatchQueue, flags: DispatchWorkItemFlags = []) {
11+
self.executor = DispatchQueueExecutor(queue: queue, flags: flags)
1212
}
1313

1414
nonisolated var unownedExecutor: UnownedSerialExecutor {
@@ -22,13 +22,15 @@ actor DispatchQueueActor {
2222

2323
private final class DispatchQueueExecutor: SerialExecutor {
2424
private let queue: DispatchQueue
25+
private let flags: DispatchWorkItemFlags
2526

26-
init(queue: DispatchQueue) {
27+
init(queue: DispatchQueue, flags: DispatchWorkItemFlags) {
2728
self.queue = queue
29+
self.flags = flags
2830
}
2931

3032
func enqueue(_ job: UnownedJob) {
31-
queue.async {
33+
queue.async(flags: flags) {
3234
job.runSynchronously(on: self.asUnownedSerialExecutor())
3335
}
3436
}

0 commit comments

Comments
 (0)