Commit fc3d26d6 authored by chentao's avatar chentao

Fix binder ipc issue when process died unexpected

parent 1bb3a6bf
...@@ -4,16 +4,15 @@ import android.content.{ComponentName, Context, Intent, ServiceConnection} ...@@ -4,16 +4,15 @@ import android.content.{ComponentName, Context, Intent, ServiceConnection}
import android.os.{RemoteException, IBinder} import android.os.{RemoteException, IBinder}
import com.github.shadowsocks.aidl.{IShadowsocksServiceCallback, IShadowsocksService} import com.github.shadowsocks.aidl.{IShadowsocksServiceCallback, IShadowsocksService}
import com.github.shadowsocks.utils.Action import com.github.shadowsocks.utils.Action
import com.github.shadowsocks.utils.Utils
/** /**
* @author Mygod * @author Mygod
*/ */
trait ServiceBoundContext extends Context { trait ServiceBoundContext extends Context { outer =>
class ShadowsocksServiceConnection extends ServiceConnection { class ShadowsocksServiceConnection extends ServiceConnection {
override def onServiceConnected(name: ComponentName, service: IBinder) { override def onServiceConnected(name: ComponentName, service: IBinder) {
bgService = IShadowsocksService.Stub.asInterface(service) bgService = IShadowsocksService.Stub.asInterface(service)
bgService.asBinder().linkToDeath(new ShadowsocksDeathRecipient(outer), 0)
registerCallback registerCallback
ServiceBoundContext.this.onServiceConnected() ServiceBoundContext.this.onServiceConnected()
} }
...@@ -33,11 +32,12 @@ trait ServiceBoundContext extends Context { ...@@ -33,11 +32,12 @@ trait ServiceBoundContext extends Context {
} catch { } catch {
case ignored: RemoteException => // Nothing case ignored: RemoteException => // Nothing
} }
def unregisterCallback = if (bgService != null && callback != null && callbackRegistered) try { def unregisterCallback = if (bgService != null && callback != null && callbackRegistered) try {
bgService.unregisterCallback(callback) bgService.unregisterCallback(callback)
callbackRegistered = false callbackRegistered = false
} catch { } catch {
case ignored: RemoteException => // Nothing case ignored: RemoteException => callbackRegistered = false
} }
def onServiceConnected() = () def onServiceConnected() = ()
......
...@@ -377,7 +377,11 @@ class Shadowsocks ...@@ -377,7 +377,11 @@ class Shadowsocks
}) })
updateTraffic(0, 0, 0, 0) updateTraffic(0, 0, 0, 0)
bindToService()
}
// Bind to the service // Bind to the service
def bindToService() {
handler.post(() => attachService) handler.post(() => attachService)
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment