From 3975f3f43cc415ecc6f5927471f5cc0f64bb8cf4 Mon Sep 17 00:00:00 2001 From: Mygod Date: Sat, 3 Feb 2018 22:19:22 -0800 Subject: [PATCH] Disconnect as soon as binder died --- mobile/src/main/java/com/github/shadowsocks/MainActivity.kt | 2 +- .../java/com/github/shadowsocks/ShadowsocksConnection.kt | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/mobile/src/main/java/com/github/shadowsocks/MainActivity.kt b/mobile/src/main/java/com/github/shadowsocks/MainActivity.kt index 34506e4b..c7b2e2d7 100644 --- a/mobile/src/main/java/com/github/shadowsocks/MainActivity.kt +++ b/mobile/src/main/java/com/github/shadowsocks/MainActivity.kt @@ -196,8 +196,8 @@ class MainActivity : AppCompatActivity(), ShadowsocksConnection.Interface, Drawe override fun onServiceConnected(service: IShadowsocksService) = changeState(service.state) override fun onServiceDisconnected() = changeState(BaseService.IDLE) override fun binderDied() { + super.binderDied() app.handler.post { - connection.disconnect() Executable.killAll() connection.connect() } diff --git a/mobile/src/main/java/com/github/shadowsocks/ShadowsocksConnection.kt b/mobile/src/main/java/com/github/shadowsocks/ShadowsocksConnection.kt index 8fecccd1..fc248fc1 100644 --- a/mobile/src/main/java/com/github/shadowsocks/ShadowsocksConnection.kt +++ b/mobile/src/main/java/com/github/shadowsocks/ShadowsocksConnection.kt @@ -48,7 +48,10 @@ class ShadowsocksConnection(private val instance: Interface) : ServiceConnection * Different from Android framework, this method will be called even when you call `detachService`. */ fun onServiceDisconnected() { } - override fun binderDied() { } + override fun binderDied() { + connection.service = null + connection.disconnect() + } } private var connectionActive = false @@ -109,6 +112,7 @@ class ShadowsocksConnection(private val instance: Interface) : ServiceConnection connectionActive = false if (instance.listenForDeath) binder?.unlinkToDeath(instance, 0) binder = null + service?.stopListeningForBandwidth(instance.serviceCallback) service = null } }