am d301c904: Merge change I305c181c into eclair
Merge commit 'd301c90446644f63cda9b9263f83332676065bb4' into eclair-mr2
* commit 'd301c90446644f63cda9b9263f83332676065bb4':
Delay 500ms between each registering each SDP record using sdptool.
diff --git a/core/java/android/server/BluetoothService.java b/core/java/android/server/BluetoothService.java
index f0bd249..0db29a4 100644
--- a/core/java/android/server/BluetoothService.java
+++ b/core/java/android/server/BluetoothService.java
@@ -208,6 +208,7 @@
return false;
}
setBluetoothState(BluetoothAdapter.STATE_TURNING_OFF);
+ mHandler.removeMessages(MESSAGE_REGISTER_SDP_RECORDS);
// Allow 3 seconds for profiles to gracefully disconnect
// TODO: Introduce a callback mechanism so that each profile can notify
@@ -327,12 +328,39 @@
public void handleMessage(Message msg) {
switch (msg.what) {
case MESSAGE_REGISTER_SDP_RECORDS:
- //TODO: Don't assume HSP/HFP is running, don't use sdptool,
- if (isEnabled()) {
+ if (!isEnabled()) {
+ return;
+ }
+ // SystemService.start() forks sdptool to register service
+ // records. It can fail to register some records if it is
+ // forked multiple times in a row, probably because there is
+ // some race in sdptool or bluez when operated in parallel.
+ // As a workaround, delay 500ms between each fork of sdptool.
+ // TODO: Don't fork sdptool in order to regsiter service
+ // records, use a DBUS call instead.
+ switch (msg.arg1) {
+ case 1:
+ Log.d(TAG, "Registering hsag record");
SystemService.start("hsag");
+ mHandler.sendMessageDelayed(
+ mHandler.obtainMessage(MESSAGE_REGISTER_SDP_RECORDS, 2, -1), 500);
+ break;
+ case 2:
+ Log.d(TAG, "Registering hfag record");
SystemService.start("hfag");
+ mHandler.sendMessageDelayed(
+ mHandler.obtainMessage(MESSAGE_REGISTER_SDP_RECORDS, 3, -1), 500);
+ break;
+ case 3:
+ Log.d(TAG, "Registering opush record");
SystemService.start("opush");
+ mHandler.sendMessageDelayed(
+ mHandler.obtainMessage(MESSAGE_REGISTER_SDP_RECORDS, 4, -1), 500);
+ break;
+ case 4:
+ Log.d(TAG, "Registering pbap record");
SystemService.start("pbap");
+ break;
}
break;
case MESSAGE_FINISH_DISABLE:
@@ -402,8 +430,8 @@
}
mIsDiscovering = false;
mBondState.loadBondState();
- mHandler.sendMessageDelayed(mHandler.obtainMessage(MESSAGE_REGISTER_SDP_RECORDS),
- 3000);
+ mHandler.sendMessageDelayed(
+ mHandler.obtainMessage(MESSAGE_REGISTER_SDP_RECORDS, 1, -1), 3000);
// Log bluetooth on to battery stats.
long ident = Binder.clearCallingIdentity();