Replaces NSRecursiveLock with RecursiveLock.

This commit is contained in:
Krunoslav Zaher 2017-01-15 23:06:43 +01:00
parent 9ba39d92b0
commit e8821d2a97
28 changed files with 46 additions and 45 deletions

View File

@ -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()

View File

@ -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

View File

@ -9,7 +9,7 @@
import Foundation
protocol LockOwnerType : class, Lock {
var _lock: NSRecursiveLock { get }
var _lock: RecursiveLock { get }
}
extension LockOwnerType {

View File

@ -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

View File

@ -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()

View File

@ -16,7 +16,7 @@ final class CombineLatestCollectionTypeSink<C: Collection, O: ObserverType>
let _parent: Parent
let _lock = NSRecursiveLock()
let _lock = RecursiveLock()
// state
var _numberOfValues = 0

View File

@ -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

View File

@ -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?

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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?

View File

@ -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

View File

@ -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
}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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()

View File

@ -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

View File

@ -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
}

View File

@ -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

View File

@ -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

View File

@ -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()

View File

@ -0,0 +1 @@
../../RxSwift/Concurrency/FastRecursiveLock.swift

View File

@ -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()

View File

@ -23,7 +23,7 @@ class PrimitiveHotObservable<ElementType> : ObservableType {
var subscriptions = [Subscription]()
let observers = PublishSubject<ElementType>()
let lock = NSRecursiveLock()
let lock = RecursiveLock()
init() {
}