diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2022-06-15 01:02:48 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2022-06-15 01:02:48 +0000 |
commit | ba00fdc015a970eb6553c41a6da95ef8c55d743c (patch) | |
tree | 023dde0599d97ef8f48b4c4d4f77024896ed9931 | |
parent | 4809a2f4c673db750ba03117c3990ef8696ca577 (diff) | |
parent | ba63875cdefdc4f2b73b1668322668ee24501edc (diff) |
Merge "Prevent infinite rebind" into tm-dev
-rw-r--r-- | service/java/com/android/server/bluetooth/BluetoothManagerService.java | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/service/java/com/android/server/bluetooth/BluetoothManagerService.java b/service/java/com/android/server/bluetooth/BluetoothManagerService.java index 0f2fcc9778..303074574e 100644 --- a/service/java/com/android/server/bluetooth/BluetoothManagerService.java +++ b/service/java/com/android/server/bluetooth/BluetoothManagerService.java @@ -115,6 +115,7 @@ public class BluetoothManagerService extends IBluetoothManager.Stub { private static final int ACTIVE_LOG_MAX_SIZE = 20; private static final int CRASH_LOG_MAX_SIZE = 100; + private static final int DEFAULT_REBIND_COUNT = 3; private static final int TIMEOUT_BIND_MS = 3000; //Maximum msec to wait for a bind /** @@ -1461,7 +1462,7 @@ public class BluetoothManagerService extends IBluetoothManager.Stub { } psc = new ProfileServiceConnections(intent); - if (!psc.bindService()) { + if (!psc.bindService(DEFAULT_REBIND_COUNT)) { return false; } @@ -1590,7 +1591,7 @@ public class BluetoothManagerService extends IBluetoothManager.Stub { mIntent = intent; } - private boolean bindService() { + private boolean bindService(int rebindCount) { int state = BluetoothAdapter.STATE_OFF; try { mBluetoothLock.readLock().lock(); @@ -1613,6 +1614,7 @@ public class BluetoothManagerService extends IBluetoothManager.Stub { && doBind(mIntent, this, 0, USER_HANDLE_CURRENT_OR_SELF)) { Message msg = mHandler.obtainMessage(MESSAGE_BIND_PROFILE_SERVICE); msg.obj = this; + msg.arg1 = rebindCount; mHandler.sendMessageDelayed(msg, TIMEOUT_BIND_MS); return true; } @@ -1632,6 +1634,7 @@ public class BluetoothManagerService extends IBluetoothManager.Stub { if (!mHandler.hasMessages(MESSAGE_BIND_PROFILE_SERVICE, this)) { Message msg = mHandler.obtainMessage(MESSAGE_BIND_PROFILE_SERVICE); msg.obj = this; + msg.arg1 = DEFAULT_REBIND_COUNT; mHandler.sendMessage(msg); } } @@ -2185,7 +2188,10 @@ public class BluetoothManagerService extends IBluetoothManager.Stub { if (psc == null) { break; } - psc.bindService(); + if (msg.arg1 > 0) { + mContext.unbindService(psc); + psc.bindService(msg.arg1 - 1); + } break; } case MESSAGE_BLUETOOTH_SERVICE_CONNECTED: { |