From 7d0548d0944e48421857de4aec2822ced325bea0 Mon Sep 17 00:00:00 2001 From: Jaikumar Ganesh Date: Mon, 18 Oct 2010 15:29:09 -0700 Subject: [PATCH] Fix race condition between starting of service and getting the Profile Proxy. Incoming A2DP connections were not working. Change-Id: I5a3322ddb39b2512495b4cd2e35593da0f605087 --- core/java/android/server/BluetoothEventLoop.java | 2 ++ core/java/android/server/BluetoothService.java | 4 ++++ services/java/com/android/server/SystemServer.java | 3 ++- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/core/java/android/server/BluetoothEventLoop.java b/core/java/android/server/BluetoothEventLoop.java index cfbc2bd7bf072..239c3ac37a2ff 100644 --- a/core/java/android/server/BluetoothEventLoop.java +++ b/core/java/android/server/BluetoothEventLoop.java @@ -120,7 +120,9 @@ class BluetoothEventLoop { | PowerManager.ON_AFTER_RELEASE, TAG); mWakeLock.setReferenceCounted(false); initializeNativeDataNative(); + } + /*package*/ void getProfileProxy() { mAdapter.getProfileProxy(mContext, mProfileServiceListener, BluetoothProfile.A2DP); } diff --git a/core/java/android/server/BluetoothService.java b/core/java/android/server/BluetoothService.java index f8a39f797d2a2..7abb98eebefa9 100644 --- a/core/java/android/server/BluetoothService.java +++ b/core/java/android/server/BluetoothService.java @@ -319,6 +319,10 @@ public class BluetoothService extends IBluetooth.Stub { mEventLoop = new BluetoothEventLoop(mContext, mAdapter, this); } + public synchronized void initAfterA2dpRegistration() { + mEventLoop.getProfileProxy(); + } + @Override protected void finalize() throws Throwable { mContext.unregisterReceiver(mReceiver); diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index ca763ef098eae..ec12e80472285 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -215,6 +215,7 @@ class ServerThread extends Thread { bluetoothA2dp = new BluetoothA2dpService(context, bluetooth); ServiceManager.addService(BluetoothA2dpService.BLUETOOTH_A2DP_SERVICE, bluetoothA2dp); + bluetooth.initAfterA2dpRegistration(); int bluetoothOn = Settings.Secure.getInt(mContentResolver, Settings.Secure.BLUETOOTH_ON, 0); @@ -438,7 +439,7 @@ class ServerThread extends Thread { } catch (Throwable e) { Slog.e(TAG, "Failure starting Recognition Service", e); } - + try { Slog.i(TAG, "DiskStats Service"); ServiceManager.addService("diskstats", new DiskStatsService(context));