]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
Fix retain cycle between NWPathMonitor and PacketTunnelProvider
authorAndrej Mihajlov <and@mullvad.net>
Fri, 19 Jun 2020 10:42:35 +0000 (12:42 +0200)
committerJason A. Donenfeld <Jason@zx2c4.com>
Thu, 25 Jun 2020 23:50:15 +0000 (17:50 -0600)
See: https://www.marisibrothers.com/2017/04/memory-leak-in-swift-assigning-function.html

Signed-off-by: Andrej Mihajlov <and@mullvad.net>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift

index 2f7062fea14aae07e7865939cafbb883654d4c26..987c290f1e8863c2e0d0207df984cea58ac05fc2 100644 (file)
@@ -52,7 +52,9 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
                 startTunnelCompletionHandler(PacketTunnelProviderError.couldNotSetNetworkSettings)
             } else {
                 self.networkMonitor = NWPathMonitor()
-                self.networkMonitor!.pathUpdateHandler = self.pathUpdate
+                self.networkMonitor!.pathUpdateHandler = { [weak self] path in
+                    self?.pathUpdate(path: path)
+                }
                 self.networkMonitor!.start(queue: DispatchQueue(label: "NetworkMonitor"))
 
                 let fileDescriptor = (self.packetFlow.value(forKeyPath: "socket.fileDescriptor") as? Int32) ?? -1