diff options
author | der richter <der.richter@gmx.de> | 2020-12-20 20:05:18 +0100 |
---|---|---|
committer | der richter <der.richter@gmx.de> | 2021-01-13 16:23:47 +0100 |
commit | dae9ea3fa791798149a2fed881e4e0e8142dceac (patch) | |
tree | c6bf78917f52f33aa9b3e610e231242e0a67b19a /video/out | |
parent | ce1571ac01e815c71a6075a4bad1c7b5ec4820dd (diff) | |
download | mpv-dae9ea3fa791798149a2fed881e4e0e8142dceac.tar.bz2 mpv-dae9ea3fa791798149a2fed881e4e0e8142dceac.tar.xz |
mac: fix dangling pointers
initialising UnsafeMutableRawPointer the way we did won't free those
pointers and we get dangling pointers. explicitly define a scope those
pointers are alive and auto freed.
Diffstat (limited to 'video/out')
-rw-r--r-- | video/out/mac/common.swift | 45 |
1 files changed, 17 insertions, 28 deletions
diff --git a/video/out/mac/common.swift b/video/out/mac/common.swift index 20718b169a..6c3d0fcfb3 100644 --- a/video/out/mac/common.swift +++ b/video/out/mac/common.swift @@ -531,42 +531,36 @@ class Common: NSObject { events.pointee |= Int32(checkEvents()) return VO_TRUE case VOCTRL_VO_OPTS_CHANGED: - var o: UnsafeMutableRawPointer? - while mpv.nextChangedOption(property: &o) { - guard let opt = o else { - log.sendError("No changed options was retrieved") - return VO_TRUE - } - if opt == UnsafeMutableRawPointer(&mpv.optsPtr.pointee.border) { + var opt: UnsafeMutableRawPointer? + while mpv.nextChangedOption(property: &opt) { + switch opt { + case MPVHelper.getPointer(&mpv.optsPtr.pointee.border): DispatchQueue.main.async { self.window?.border = Bool(mpv.opts.border) } - } - if opt == UnsafeMutableRawPointer(&mpv.optsPtr.pointee.fullscreen) { + case MPVHelper.getPointer(&mpv.optsPtr.pointee.fullscreen): DispatchQueue.main.async { self.window?.toggleFullScreen(nil) } - } - if opt == UnsafeMutableRawPointer(&mpv.optsPtr.pointee.ontop) || - opt == UnsafeMutableRawPointer(&mpv.optsPtr.pointee.ontop_level) { + case MPVHelper.getPointer(&mpv.optsPtr.pointee.ontop): fallthrough + case MPVHelper.getPointer(&mpv.optsPtr.pointee.ontop_level): DispatchQueue.main.async { self.window?.setOnTop(Bool(mpv.opts.ontop), Int(mpv.opts.ontop_level)) } - } - if opt == UnsafeMutableRawPointer(&mpv.optsPtr.pointee.keepaspect_window) { + case MPVHelper.getPointer(&mpv.optsPtr.pointee.keepaspect_window): DispatchQueue.main.async { self.window?.keepAspect = Bool(mpv.opts.keepaspect_window) } - } - if opt == UnsafeMutableRawPointer(&mpv.optsPtr.pointee.window_minimized) { + case MPVHelper.getPointer(&mpv.optsPtr.pointee.window_minimized): DispatchQueue.main.async { self.window?.setMinimized(Bool(mpv.opts.window_minimized)) } - } - if opt == UnsafeMutableRawPointer(&mpv.optsPtr.pointee.window_maximized) { + case MPVHelper.getPointer(&mpv.optsPtr.pointee.window_maximized): DispatchQueue.main.async { self.window?.setMaximized(Bool(mpv.opts.window_maximized)) } + default: + break } } return VO_TRUE @@ -676,19 +670,14 @@ class Common: NSObject { return } - var o: UnsafeMutableRawPointer? - while mpv.nextChangedMacOption(property: &o) { - guard let opt = o else { - log.sendWarning("Could not retrieve changed mac option") - return - } - + var opt: UnsafeMutableRawPointer? + while mpv.nextChangedMacOption(property: &opt) { switch opt { - case UnsafeMutableRawPointer(&mpv.macOptsPtr.pointee.macos_title_bar_appearance): + case MPVHelper.getPointer(&mpv.macOptsPtr.pointee.macos_title_bar_appearance): titleBar?.set(appearance: Int(mpv.macOpts.macos_title_bar_appearance)) - case UnsafeMutableRawPointer(&mpv.macOptsPtr.pointee.macos_title_bar_material): + case MPVHelper.getPointer(&mpv.macOptsPtr.pointee.macos_title_bar_material): titleBar?.set(material: Int(mpv.macOpts.macos_title_bar_material)) - case UnsafeMutableRawPointer(&mpv.macOptsPtr.pointee.macos_title_bar_color): + case MPVHelper.getPointer(&mpv.macOptsPtr.pointee.macos_title_bar_color): titleBar?.set(color: mpv.macOpts.macos_title_bar_color) default: break |