diff options
Diffstat (limited to 'ios/MullvadRustRuntime/MullvadAddressCacheProvider.swift')
| -rw-r--r-- | ios/MullvadRustRuntime/MullvadAddressCacheProvider.swift | 16 |
1 files changed, 6 insertions, 10 deletions
diff --git a/ios/MullvadRustRuntime/MullvadAddressCacheProvider.swift b/ios/MullvadRustRuntime/MullvadAddressCacheProvider.swift index 4c731eaf3a..5de81c733e 100644 --- a/ios/MullvadRustRuntime/MullvadAddressCacheProvider.swift +++ b/ios/MullvadRustRuntime/MullvadAddressCacheProvider.swift @@ -15,17 +15,13 @@ public func iniSwiftAddressCacheWrapper(provider: DefaultAddressCacheProvider) - } @_cdecl("swift_get_cached_endpoint") -func getCacheEndpoint(rawAddressCacheProvider: UnsafeMutableRawPointer) -> UnsafePointer<CChar>! { +func getCacheEndpoint(rawAddressCacheProvider: UnsafeMutableRawPointer) -> LateStringDeallocator { let addressCacheProvider = Unmanaged<DefaultAddressCacheProvider>.fromOpaque(rawAddressCacheProvider) .takeUnretainedValue() let cStr = addressCacheProvider.getCurrentEndpoint().description.toCStringPointer() - /** - `cStr` needs to shortly outlive the return of this function in order to get transformed into a `SocketAddr` - This is the simplest way to guarantee that the pointer returned does not get deallocated immediately - Or that no memory is leaked every time this function gets called - **/ - DispatchQueue(label: "com.MullvadRustRuntime.DecallocateQueue").async { - cStr?.deallocate() - } - return cStr + return LateStringDeallocator(ptr: cStr, deallocate_ptr: deallocate_pointer(pointer:)) +} + +func deallocate_pointer(pointer: UnsafePointer<CChar>?) { + pointer?.deallocate() } |
