aboutsummaryrefslogtreecommitdiffstats
path: root/WireGuard
diff options
context:
space:
mode:
authorJeroen Leenarts <jeroen.leenarts@gmail.com>2018-09-15 21:23:47 +0200
committerJeroen Leenarts <jeroen.leenarts@gmail.com>2018-09-15 21:23:47 +0200
commit3a8f8ef9e64cff1fe297fa2500b6c6240a2aa5be (patch)
tree8003fd933698f5430d3a2fb881b0ae0bafc6b95b /WireGuard
parentRe-center app icon. (diff)
downloadwireguard-apple-3a8f8ef9e64cff1fe297fa2500b6c6240a2aa5be.tar.xz
wireguard-apple-3a8f8ef9e64cff1fe297fa2500b6c6240a2aa5be.zip
Prevent crash on add and deletion of config.
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'WireGuard')
-rw-r--r--WireGuard/Coordinators/AppCoordinator.swift55
1 files changed, 31 insertions, 24 deletions
diff --git a/WireGuard/Coordinators/AppCoordinator.swift b/WireGuard/Coordinators/AppCoordinator.swift
index 460a6d0..0de4271 100644
--- a/WireGuard/Coordinators/AppCoordinator.swift
+++ b/WireGuard/Coordinators/AppCoordinator.swift
@@ -328,42 +328,49 @@ extension AppCoordinator: TunnelsTableViewControllerDelegate {
}
func connect(tunnel: Tunnel, tunnelsTableViewController: TunnelsTableViewController) {
- let manager = self.providerManager(for: tunnel)!
- let block = {
- switch manager.connection.status {
- case .invalid, .disconnected:
- self.connect(tunnel: tunnel)
- default:
- break
+ _ = refreshProviderManagers().then { () -> Promise<Void> in
+ let manager = self.providerManager(for: tunnel)!
+ let block = {
+ switch manager.connection.status {
+ case .invalid, .disconnected:
+ self.connect(tunnel: tunnel)
+ default:
+ break
+ }
}
- }
- if manager.connection.status == .invalid {
- manager.loadFromPreferences { (_) in
+ if manager.connection.status == .invalid {
+ manager.loadFromPreferences { (_) in
+ block()
+ }
+ } else {
block()
}
- } else {
- block()
+
+ return Promise.value(())
}
}
func disconnect(tunnel: Tunnel, tunnelsTableViewController: TunnelsTableViewController) {
- let manager = self.providerManager(for: tunnel)!
- let block = {
- switch manager.connection.status {
- case .connected, .connecting:
- self.disconnect(tunnel: tunnel)
- default:
- break
+ _ = refreshProviderManagers().then { () -> Promise<Void> in
+ let manager = self.providerManager(for: tunnel)!
+ let block = {
+ switch manager.connection.status {
+ case .connected, .connecting:
+ self.disconnect(tunnel: tunnel)
+ default:
+ break
+ }
}
- }
- if manager.connection.status == .invalid {
- manager.loadFromPreferences { (_) in
+ if manager.connection.status == .invalid {
+ manager.loadFromPreferences { (_) in
+ block()
+ }
+ } else {
block()
}
- } else {
- block()
+ return Promise.value(())
}
}