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= 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:34 var calledRun: AtomicInt = 0RunLoopLock.swift:35 var calledStop: AtomicInt = 0= OSAtomicIncrement32 0028 let AtomicDecrement = OSAtomicDecrement32 0029 #endif 0030 0031 class RunLoopLock
RunLoopLock.swift:57 if AtomicIncrement(&calledStop) != 1 {RunLoopLock.swift:67 if AtomicIncrement(&calledRun) != 1 {{ 0032 let currentRunLoop
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(): CFRunLoopRef 0033 0034 var calledRun
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): AtomicInt = 0 0035 var calledStop
RunLoopLock.swift:67 if AtomicIncrement(&calledRun) != 1 {: AtomicInt = 0 0036 0037 init
RunLoopLock.swift:57 if AtomicIncrement(&calledStop) != 1 {() { 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: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()() { 0067 if AtomicIncrement(&calledRun) != 1 { 0068 fatalError("Run can be only called once") 0069 } 0070 CFRunLoopRun() 0071 } 0072 } 0073
BlockingObservable+Operators.swift:50 lock.run()BlockingObservable+Operators.swift:102 lock.run()BlockingObservable+Operators.swift:151 lock.run()BlockingObservable+Operators.swift:227 lock.run()