0001    //
0002    //  RunLoopLock.swift
0003    //  Rx
0004    //
0005    //  Created by Krunoslav Zaher on 11/5/15.
0006    //  Copyright © 2015 Krunoslav Zaher. All rights reserved.
0007    //
0008    
0009    import Foundation
0010    #if !RX_NO_MODULE
0011        import RxSwift
0012    #endif
0013    
0014    typealias AtomicInt
RunLoopLock.swift:34
    var calledRun: AtomicInt = 0
RunLoopLock.swift:35
    var calledStop: AtomicInt = 0
= Int32 0015 0016 #if os(Linux) 0017 func AtomicIncrement(increment: UnsafeMutablePointer<AtomicInt>) -> AtomicInt { 0018 increment.memory = increment.memory + 1 0019 return increment.memory 0020 } 0021 0022 func AtomicDecrement(increment: UnsafeMutablePointer<AtomicInt>) -> AtomicInt { 0023 increment.memory = increment.memory - 1 0024 return increment.memory 0025 } 0026 #else 0027 let AtomicIncrement
RunLoopLock.swift:57
        if AtomicIncrement(&calledStop) != 1 {
RunLoopLock.swift:67
        if AtomicIncrement(&calledRun) != 1 {
= OSAtomicIncrement32 0028 let AtomicDecrement = OSAtomicDecrement32 0029 #endif 0030 0031 class RunLoopLock
BlockingObservable+Operators.swift:27
        let lock = RunLoopLock()
BlockingObservable+Operators.swift:77
        let lock = RunLoopLock()
BlockingObservable+Operators.swift:129
        let lock = RunLoopLock()
BlockingObservable+Operators.swift:190
        let lock = RunLoopLock()
{ 0032 let currentRunLoop
RunLoopLock.swift:38
        currentRunLoop = CFRunLoopGetCurrent()
RunLoopLock.swift:42
        CFRunLoopPerformBlock(currentRunLoop, kCFRunLoopDefaultMode) {
RunLoopLock.swift:53
        CFRunLoopWakeUp(currentRunLoop)
RunLoopLock.swift:60
        CFRunLoopPerformBlock(currentRunLoop, kCFRunLoopDefaultMode) {
RunLoopLock.swift:61
            CFRunLoopStop(self.currentRunLoop)
RunLoopLock.swift:63
        CFRunLoopWakeUp(currentRunLoop)
: CFRunLoopRef 0033 0034 var calledRun
RunLoopLock.swift:67
        if AtomicIncrement(&calledRun) != 1 {
: AtomicInt = 0 0035 var calledStop
RunLoopLock.swift:57
        if AtomicIncrement(&calledStop) != 1 {
: AtomicInt = 0 0036 0037 init
BlockingObservable+Operators.swift:27
        let lock = RunLoopLock()
BlockingObservable+Operators.swift:77
        let lock = RunLoopLock()
BlockingObservable+Operators.swift:129
        let lock = RunLoopLock()
BlockingObservable+Operators.swift:190
        let lock = RunLoopLock()
() { 0038 currentRunLoop = CFRunLoopGetCurrent() 0039 } 0040 0041 func dispatch(action: () -> ()) { 0042 CFRunLoopPerformBlock(currentRunLoop, kCFRunLoopDefaultMode) { 0043 if CurrentThreadScheduler.isScheduleRequired { 0044 CurrentThreadScheduler.instance.schedule(()) { _ in 0045 action() 0046 return NopDisposable.instance 0047 } 0048 } 0049 else { 0050 action() 0051 } 0052 } 0053 CFRunLoopWakeUp(currentRunLoop) 0054 } 0055 0056 func stop() { 0057 if AtomicIncrement(&calledStop) != 1 { 0058 return 0059 } 0060 CFRunLoopPerformBlock(currentRunLoop, kCFRunLoopDefaultMode) { 0061 CFRunLoopStop(self.currentRunLoop) 0062 } 0063 CFRunLoopWakeUp(currentRunLoop) 0064 } 0065 0066 func run
BlockingObservable+Operators.swift:50
        lock.run()
BlockingObservable+Operators.swift:102
        lock.run()
BlockingObservable+Operators.swift:151
        lock.run()
BlockingObservable+Operators.swift:227
        lock.run()
() { 0067 if AtomicIncrement(&calledRun) != 1 { 0068 fatalError("Run can be only called once") 0069 } 0070 CFRunLoopRun() 0071 } 0072 } 0073