1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-12-25 03:32:01 +00:00

Resolved deadlock if an invalidate call was sent to the Electron while it was in the middle of an update.

This commit is contained in:
Thomas Harte 2016-02-16 20:35:45 -05:00
parent a01f90ff3e
commit bbffbb5dc2

View File

@ -55,21 +55,24 @@ class ElectronDocument: MachineDocument {
electron.setROM(data, slot: 15)
}
lazy var actionLock = NSLock()
override func close() {
objc_sync_enter(self)
actionLock.lock()
electron.sync()
openGLView.invalidate()
openGLView.openGLContext!.makeCurrentContext()
electron = nil
actionLock.unlock()
super.close()
objc_sync_exit(self)
}
// MARK: CSOpenGLViewDelegate
override func runForNumberOfCycles(numberOfCycles: Int32) {
objc_sync_enter(self)
electron?.runForNumberOfCycles(numberOfCycles)
objc_sync_exit(self)
if actionLock.tryLock() {
electron?.runForNumberOfCycles(numberOfCycles)
actionLock.unlock()
}
}
override func openGLView(view: CSCathodeRayView, drawViewOnlyIfDirty onlyIfDirty: Bool) {