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:
parent
a01f90ff3e
commit
bbffbb5dc2
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user