From dae9ea3fa791798149a2fed881e4e0e8142dceac Mon Sep 17 00:00:00 2001 From: der richter Date: Sun, 20 Dec 2020 20:05:18 +0100 Subject: 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. --- osdep/macos/mpv_helper.swift | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'osdep') diff --git a/osdep/macos/mpv_helper.swift b/osdep/macos/mpv_helper.swift index 171687bd89..6fde975c06 100644 --- a/osdep/macos/mpv_helper.swift +++ b/osdep/macos/mpv_helper.swift @@ -86,17 +86,23 @@ class MPVHelper { func setOption(fullscreen: Bool) { optsPtr.pointee.fullscreen = fullscreen - m_config_cache_write_opt(optsCachePtr, UnsafeMutableRawPointer(&optsPtr.pointee.fullscreen)) + _ = withUnsafeMutableBytes(of: &optsPtr.pointee.fullscreen) { (ptr: UnsafeMutableRawBufferPointer) in + m_config_cache_write_opt(optsCachePtr, ptr.baseAddress) + } } func setOption(minimized: Bool) { optsPtr.pointee.window_minimized = Int32(minimized) - m_config_cache_write_opt(optsCachePtr, UnsafeMutableRawPointer(&optsPtr.pointee.window_minimized)) + _ = withUnsafeMutableBytes(of: &optsPtr.pointee.window_minimized) { (ptr: UnsafeMutableRawBufferPointer) in + m_config_cache_write_opt(optsCachePtr, ptr.baseAddress) + } } func setOption(maximized: Bool) { optsPtr.pointee.window_maximized = Int32(maximized) - m_config_cache_write_opt(optsCachePtr, UnsafeMutableRawPointer(&optsPtr.pointee.window_maximized)) + _ = withUnsafeMutableBytes(of: &optsPtr.pointee.window_maximized) { (ptr: UnsafeMutableRawBufferPointer) in + m_config_cache_write_opt(optsCachePtr, ptr.baseAddress) + } } func setMacOptionCallback(_ callback: swift_wakeup_cb_fn, context object: AnyObject) { @@ -141,4 +147,10 @@ class MPVHelper { closure(pointers) } + + class func getPointer(_ value: inout T) -> UnsafeMutableRawPointer? { + return withUnsafeMutableBytes(of: &value) { (ptr: UnsafeMutableRawBufferPointer) in + ptr.baseAddress + } + } } -- cgit v1.2.3