summaryrefslogtreecommitdiff
path: root/service/java
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2022-06-15 01:02:48 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2022-06-15 01:02:48 +0000
commitba00fdc015a970eb6553c41a6da95ef8c55d743c (patch)
tree023dde0599d97ef8f48b4c4d4f77024896ed9931 /service/java
parent4809a2f4c673db750ba03117c3990ef8696ca577 (diff)
parentba63875cdefdc4f2b73b1668322668ee24501edc (diff)
Merge "Prevent infinite rebind" into tm-dev
Diffstat (limited to 'service/java')
-rw-r--r--service/java/com/android/server/bluetooth/BluetoothManagerService.java12
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: {