mirror of
https://github.com/ReactiveX/RxSwift.git
synced 2024-10-04 22:17:41 +03:00
Replaces NSRecursiveLock with RecursiveLock.
This commit is contained in:
parent
9ba39d92b0
commit
e8821d2a97
@ -20,7 +20,7 @@
|
||||
final class AtomicInt {
|
||||
typealias IntegerLiteralType = Int
|
||||
fileprivate var value: Int32 = 0
|
||||
fileprivate var _lock = NSRecursiveLock()
|
||||
fileprivate var _lock = RecursiveLock()
|
||||
|
||||
func lock() {
|
||||
_lock.lock()
|
||||
|
@ -14,23 +14,23 @@ protocol Lock {
|
||||
}
|
||||
|
||||
// https://lists.swift.org/pipermail/swift-dev/Week-of-Mon-20151214/000321.html
|
||||
typealias SpinLock = NSRecursiveLock
|
||||
typealias SpinLock = RecursiveLock
|
||||
|
||||
extension NSRecursiveLock : Lock {
|
||||
extension RecursiveLock : Lock {
|
||||
@inline(__always)
|
||||
func performLocked(_ action: () -> Void) {
|
||||
final func performLocked(_ action: () -> Void) {
|
||||
lock(); defer { unlock() }
|
||||
action()
|
||||
}
|
||||
|
||||
@inline(__always)
|
||||
func calculateLocked<T>(_ action: () -> T) -> T {
|
||||
final func calculateLocked<T>(_ action: () -> T) -> T {
|
||||
lock(); defer { unlock() }
|
||||
return action()
|
||||
}
|
||||
|
||||
@inline(__always)
|
||||
func calculateLockedOrFail<T>(_ action: () throws -> T) throws -> T {
|
||||
final func calculateLockedOrFail<T>(_ action: () throws -> T) throws -> T {
|
||||
lock(); defer { unlock() }
|
||||
let result = try action()
|
||||
return result
|
||||
|
@ -9,7 +9,7 @@
|
||||
import Foundation
|
||||
|
||||
protocol LockOwnerType : class, Lock {
|
||||
var _lock: NSRecursiveLock { get }
|
||||
var _lock: RecursiveLock { get }
|
||||
}
|
||||
|
||||
extension LockOwnerType {
|
||||
|
@ -55,7 +55,7 @@ final class AmbSink<O: ObserverType> : Sink<O> {
|
||||
|
||||
private let _parent: Parent
|
||||
|
||||
private let _lock = NSRecursiveLock()
|
||||
private let _lock = RecursiveLock()
|
||||
// state
|
||||
private var _choice = AmbState.neither
|
||||
|
||||
|
@ -39,7 +39,7 @@ final class BufferTimeCountSink<Element, O: ObserverType>
|
||||
|
||||
private let _parent: Parent
|
||||
|
||||
let _lock = NSRecursiveLock()
|
||||
let _lock = RecursiveLock()
|
||||
|
||||
// state
|
||||
private let _timerD = SerialDisposable()
|
||||
|
@ -16,7 +16,7 @@ final class CombineLatestCollectionTypeSink<C: Collection, O: ObserverType>
|
||||
|
||||
let _parent: Parent
|
||||
|
||||
let _lock = NSRecursiveLock()
|
||||
let _lock = RecursiveLock()
|
||||
|
||||
// state
|
||||
var _numberOfValues = 0
|
||||
|
@ -19,7 +19,7 @@ class CombineLatestSink<O: ObserverType>
|
||||
, CombineLatestProtocol {
|
||||
typealias Element = O.E
|
||||
|
||||
let _lock = NSRecursiveLock()
|
||||
let _lock = RecursiveLock()
|
||||
|
||||
private let _arity: Int
|
||||
private var _numberOfValues = 0
|
||||
@ -101,12 +101,12 @@ final class CombineLatestObserver<ElementType>
|
||||
|
||||
private let _parent: CombineLatestProtocol
|
||||
|
||||
let _lock: NSRecursiveLock
|
||||
let _lock: RecursiveLock
|
||||
private let _index: Int
|
||||
private let _this: Disposable
|
||||
private let _setLatestValue: ValueSetter
|
||||
|
||||
init(lock: NSRecursiveLock, parent: CombineLatestProtocol, index: Int, setLatestValue: @escaping ValueSetter, this: Disposable) {
|
||||
init(lock: RecursiveLock, parent: CombineLatestProtocol, index: Int, setLatestValue: @escaping ValueSetter, this: Disposable) {
|
||||
_lock = lock
|
||||
_parent = parent
|
||||
_index = index
|
||||
|
@ -28,7 +28,7 @@ public class ConnectableObservable<Element>
|
||||
final class Connection<S: SubjectType> : ObserverType, Disposable {
|
||||
typealias E = S.SubjectObserverType.E
|
||||
|
||||
private var _lock: NSRecursiveLock
|
||||
private var _lock: RecursiveLock
|
||||
// state
|
||||
private var _parent: ConnectableObservableAdapter<S>?
|
||||
private var _subscription : Disposable?
|
||||
@ -36,7 +36,7 @@ final class Connection<S: SubjectType> : ObserverType, Disposable {
|
||||
|
||||
private var _disposed: Bool = false
|
||||
|
||||
init(parent: ConnectableObservableAdapter<S>, subjectObserver: S.SubjectObserverType, lock: NSRecursiveLock, subscription: Disposable) {
|
||||
init(parent: ConnectableObservableAdapter<S>, subjectObserver: S.SubjectObserverType, lock: RecursiveLock, subscription: Disposable) {
|
||||
_parent = parent
|
||||
_subscription = subscription
|
||||
_lock = lock
|
||||
@ -78,7 +78,7 @@ final class ConnectableObservableAdapter<S: SubjectType>
|
||||
fileprivate let _subject: S
|
||||
fileprivate let _source: Observable<S.SubjectObserverType.E>
|
||||
|
||||
fileprivate let _lock = NSRecursiveLock()
|
||||
fileprivate let _lock = RecursiveLock()
|
||||
|
||||
// state
|
||||
fileprivate var _connection: ConnectionType?
|
||||
|
@ -18,7 +18,7 @@ final class DebounceSink<O: ObserverType>
|
||||
|
||||
private let _parent: ParentType
|
||||
|
||||
let _lock = NSRecursiveLock()
|
||||
let _lock = RecursiveLock()
|
||||
|
||||
// state
|
||||
private var _id = 0 as UInt64
|
||||
|
@ -15,7 +15,7 @@ final class DelaySink<O: ObserverType>
|
||||
typealias Source = Observable<E>
|
||||
typealias DisposeKey = Bag<Disposable>.KeyType
|
||||
|
||||
private let _lock = NSRecursiveLock()
|
||||
private let _lock = RecursiveLock()
|
||||
|
||||
private let _dueTime: RxTimeInterval
|
||||
private let _scheduler: SchedulerType
|
||||
|
@ -21,7 +21,7 @@ final class MergeLimitedSinkIter<S: ObservableConvertibleType, O: ObserverType>
|
||||
private let _parent: Parent
|
||||
private let _disposeKey: DisposeKey
|
||||
|
||||
var _lock: NSRecursiveLock {
|
||||
var _lock: RecursiveLock {
|
||||
return _parent._lock
|
||||
}
|
||||
|
||||
@ -68,7 +68,7 @@ final class MergeLimitedSink<S: ObservableConvertibleType, O: ObserverType>
|
||||
|
||||
fileprivate let _maxConcurrent: Int
|
||||
|
||||
let _lock = NSRecursiveLock()
|
||||
let _lock = RecursiveLock()
|
||||
|
||||
// state
|
||||
fileprivate var _stopped = false
|
||||
@ -276,7 +276,7 @@ class MergeSink<SourceType, S: ObservableConvertibleType, O: ObserverType>
|
||||
typealias ResultType = O.E
|
||||
typealias Element = SourceType
|
||||
|
||||
fileprivate let _lock = NSRecursiveLock()
|
||||
fileprivate let _lock = RecursiveLock()
|
||||
|
||||
fileprivate var subscribeNext: Bool {
|
||||
return true
|
||||
|
@ -64,7 +64,7 @@ final class RefCountSink<CO: ConnectableObservableType, O: ObserverType>
|
||||
}
|
||||
|
||||
final class RefCount<CO: ConnectableObservableType>: Producer<CO.E> {
|
||||
fileprivate let _lock = NSRecursiveLock()
|
||||
fileprivate let _lock = RecursiveLock()
|
||||
|
||||
// state
|
||||
fileprivate var _count = 0
|
||||
|
@ -84,7 +84,7 @@ final class RetryWhenSequenceSink<S: Sequence, O: ObserverType, TriggerObservabl
|
||||
typealias Element = O.E
|
||||
typealias Parent = RetryWhenSequence<S, TriggerObservable, Error>
|
||||
|
||||
let _lock = NSRecursiveLock()
|
||||
let _lock = RecursiveLock()
|
||||
|
||||
fileprivate let _parent: Parent
|
||||
|
||||
|
@ -18,7 +18,7 @@ final class SamplerSink<O: ObserverType, SampleType>
|
||||
|
||||
fileprivate let _parent: Parent
|
||||
|
||||
var _lock: NSRecursiveLock {
|
||||
var _lock: RecursiveLock {
|
||||
return _parent._lock
|
||||
}
|
||||
|
||||
@ -68,7 +68,7 @@ final class SampleSequenceSink<O: ObserverType, SampleType>
|
||||
|
||||
fileprivate let _parent: Parent
|
||||
|
||||
let _lock = NSRecursiveLock()
|
||||
let _lock = RecursiveLock()
|
||||
|
||||
// state
|
||||
fileprivate var _element = nil as Element?
|
||||
|
@ -17,7 +17,7 @@ final class SkipUntilSinkOther<Other, O: ObserverType>
|
||||
|
||||
fileprivate let _parent: Parent
|
||||
|
||||
var _lock: NSRecursiveLock {
|
||||
var _lock: RecursiveLock {
|
||||
return _parent._lock
|
||||
}
|
||||
|
||||
@ -64,7 +64,7 @@ final class SkipUntilSink<Other, O: ObserverType>
|
||||
typealias E = O.E
|
||||
typealias Parent = SkipUntil<E, Other>
|
||||
|
||||
let _lock = NSRecursiveLock()
|
||||
let _lock = RecursiveLock()
|
||||
fileprivate let _parent: Parent
|
||||
fileprivate var _forwardElements = false
|
||||
|
||||
|
@ -18,7 +18,7 @@ class SwitchSink<SourceType, S: ObservableConvertibleType, O: ObserverType>
|
||||
fileprivate let _subscriptions: SingleAssignmentDisposable = SingleAssignmentDisposable()
|
||||
fileprivate let _innerSubscription: SerialDisposable = SerialDisposable()
|
||||
|
||||
let _lock = NSRecursiveLock()
|
||||
let _lock = RecursiveLock()
|
||||
|
||||
// state
|
||||
fileprivate var _stopped = false
|
||||
@ -90,7 +90,7 @@ final class SwitchSinkIter<SourceType, S: ObservableConvertibleType, O: Observer
|
||||
fileprivate let _id: Int
|
||||
fileprivate let _self: Disposable
|
||||
|
||||
var _lock: NSRecursiveLock {
|
||||
var _lock: RecursiveLock {
|
||||
return _parent._lock
|
||||
}
|
||||
|
||||
|
@ -80,7 +80,7 @@ final class TakeTimeSink<ElementType, O: ObserverType>
|
||||
|
||||
fileprivate let _parent: Parent
|
||||
|
||||
let _lock = NSRecursiveLock()
|
||||
let _lock = RecursiveLock()
|
||||
|
||||
init(parent: Parent, observer: O, cancel: Cancelable) {
|
||||
_parent = parent
|
||||
|
@ -17,7 +17,7 @@ final class TakeUntilSinkOther<Other, O: ObserverType>
|
||||
|
||||
fileprivate let _parent: Parent
|
||||
|
||||
var _lock: NSRecursiveLock {
|
||||
var _lock: RecursiveLock {
|
||||
return _parent._lock
|
||||
}
|
||||
|
||||
@ -65,7 +65,7 @@ final class TakeUntilSink<Other, O: ObserverType>
|
||||
|
||||
fileprivate let _parent: Parent
|
||||
|
||||
let _lock = NSRecursiveLock()
|
||||
let _lock = RecursiveLock()
|
||||
|
||||
// state
|
||||
fileprivate var _open = false
|
||||
|
@ -18,7 +18,7 @@ final class ThrottleSink<O: ObserverType>
|
||||
|
||||
private let _parent: ParentType
|
||||
|
||||
let _lock = NSRecursiveLock()
|
||||
let _lock = RecursiveLock()
|
||||
|
||||
// state
|
||||
private var _lastUnsentElement: Element? = nil
|
||||
|
@ -14,7 +14,7 @@ final class TimeoutSink<O: ObserverType>: Sink<O>, LockOwnerType, ObserverType {
|
||||
|
||||
private let _parent: Parent
|
||||
|
||||
let _lock = NSRecursiveLock()
|
||||
let _lock = RecursiveLock()
|
||||
|
||||
private let _timerD = SerialDisposable()
|
||||
private let _subscription = SerialDisposable()
|
||||
|
@ -18,7 +18,7 @@ final class WindowTimeCountSink<Element, O: ObserverType>
|
||||
|
||||
private let _parent: Parent
|
||||
|
||||
let _lock = NSRecursiveLock()
|
||||
let _lock = RecursiveLock()
|
||||
|
||||
private var _subject = PublishSubject<Element>()
|
||||
private var _count = 0
|
||||
|
@ -19,7 +19,7 @@ final class WithLatestFromSink<FirstType, SecondType, O: ObserverType>
|
||||
|
||||
fileprivate let _parent: Parent
|
||||
|
||||
var _lock = NSRecursiveLock()
|
||||
var _lock = RecursiveLock()
|
||||
fileprivate var _latest: SecondType?
|
||||
|
||||
init(parent: Parent, observer: O, cancel: Cancelable) {
|
||||
@ -76,7 +76,7 @@ final class WithLatestFromSecond<FirstType, SecondType, O: ObserverType>
|
||||
private let _parent: Parent
|
||||
private let _disposable: Disposable
|
||||
|
||||
var _lock: NSRecursiveLock {
|
||||
var _lock: RecursiveLock {
|
||||
return _parent._lock
|
||||
}
|
||||
|
||||
|
@ -16,7 +16,7 @@ final class ZipCollectionTypeSink<C: Collection, O: ObserverType>
|
||||
|
||||
private let _parent: Parent
|
||||
|
||||
private let _lock = NSRecursiveLock()
|
||||
private let _lock = RecursiveLock()
|
||||
|
||||
// state
|
||||
private var _numberOfValues = 0
|
||||
|
@ -20,7 +20,7 @@ class ZipSink<O: ObserverType> : Sink<O>, ZipSinkProtocol {
|
||||
|
||||
let _arity: Int
|
||||
|
||||
let _lock = NSRecursiveLock()
|
||||
let _lock = RecursiveLock()
|
||||
|
||||
// state
|
||||
private var _isDone: [Bool]
|
||||
@ -111,14 +111,14 @@ final class ZipObserver<ElementType>
|
||||
|
||||
private var _parent: ZipSinkProtocol?
|
||||
|
||||
let _lock: NSRecursiveLock
|
||||
let _lock: RecursiveLock
|
||||
|
||||
// state
|
||||
private let _index: Int
|
||||
private let _this: Disposable
|
||||
private let _setNextValue: ValueSetter
|
||||
|
||||
init(lock: NSRecursiveLock, parent: ZipSinkProtocol, index: Int, setNextValue: @escaping ValueSetter, this: Disposable) {
|
||||
init(lock: RecursiveLock, parent: ZipSinkProtocol, index: Int, setNextValue: @escaping ValueSetter, this: Disposable) {
|
||||
_lock = lock
|
||||
_parent = parent
|
||||
_index = index
|
||||
|
@ -19,7 +19,7 @@ final class AnyRecursiveScheduler<State> {
|
||||
|
||||
typealias Action = (State, AnyRecursiveScheduler<State>) -> Void
|
||||
|
||||
private let _lock = NSRecursiveLock()
|
||||
private let _lock = RecursiveLock()
|
||||
|
||||
// state
|
||||
private let _group = CompositeDisposable()
|
||||
|
1
Sources/RxSwift/FastRecursiveLock.swift
Symbolic link
1
Sources/RxSwift/FastRecursiveLock.swift
Symbolic link
@ -0,0 +1 @@
|
||||
../../RxSwift/Concurrency/FastRecursiveLock.swift
|
@ -22,13 +22,13 @@ func allocation() {
|
||||
|
||||
repeat {
|
||||
compareTwoImplementations(benchmarkTime: true, benchmarkMemory: false, first: {
|
||||
let lock = NSRecursiveLock()
|
||||
let lock = RecursiveLock()
|
||||
for i in 0 ..< 1000 {
|
||||
lock.lock()
|
||||
lock.unlock()
|
||||
}
|
||||
}, second: {
|
||||
let lock = NSRecursiveLock()
|
||||
let lock = RecursiveLock()
|
||||
for i in 0 ..< 1000 {
|
||||
lock.lock()
|
||||
lock.unlock()
|
||||
|
@ -23,7 +23,7 @@ class PrimitiveHotObservable<ElementType> : ObservableType {
|
||||
var subscriptions = [Subscription]()
|
||||
let observers = PublishSubject<ElementType>()
|
||||
|
||||
let lock = NSRecursiveLock()
|
||||
let lock = RecursiveLock()
|
||||
|
||||
init() {
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user