summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2022-02-11 07:29:40 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2022-02-11 07:29:40 +0000
commita342218e739d018049d0014ff249e128caa4907e (patch)
treeb4df92e266cfe5a88c73a941f103c2cefe051233
parent570864b11636e97f68f1cade4366ed46b0a15db8 (diff)
parentadc9ed0f69e9e7db9f4326cf65c10e4982cea7c8 (diff)
Merge "Fix concurrency issues on state machine shutdown"
-rw-r--r--android/app/src/com/android/bluetooth/a2dp/A2dpService.java9
-rw-r--r--android/app/src/com/android/bluetooth/csip/CsipSetCoordinatorService.java9
-rw-r--r--android/app/src/com/android/bluetooth/hap/HapClientService.java9
-rw-r--r--android/app/src/com/android/bluetooth/hearingaid/HearingAidService.java9
-rw-r--r--android/app/src/com/android/bluetooth/hfp/HeadsetService.java10
-rw-r--r--android/app/src/com/android/bluetooth/le_audio/LeAudioService.java9
-rw-r--r--android/app/src/com/android/bluetooth/vc/VolumeControlService.java9
-rw-r--r--android/app/tests/unit/src/com/android/bluetooth/a2dp/A2dpStateMachineTest.java1
8 files changed, 51 insertions, 14 deletions
diff --git a/android/app/src/com/android/bluetooth/a2dp/A2dpService.java b/android/app/src/com/android/bluetooth/a2dp/A2dpService.java
index 7a3b7df82b..2c71f6d463 100644
--- a/android/app/src/com/android/bluetooth/a2dp/A2dpService.java
+++ b/android/app/src/com/android/bluetooth/a2dp/A2dpService.java
@@ -216,8 +216,13 @@ public class A2dpService extends ProfileService {
}
if (mStateMachinesThread != null) {
- mStateMachinesThread.quitSafely();
- mStateMachinesThread = null;
+ try {
+ mStateMachinesThread.quitSafely();
+ mStateMachinesThread.join();
+ mStateMachinesThread = null;
+ } catch (InterruptedException e) {
+ // Do not rethrow as we are shutting down anyway
+ }
}
// Step 2: Reset maximum number of connected audio devices
mMaxConnectedAudioDevices = 1;
diff --git a/android/app/src/com/android/bluetooth/csip/CsipSetCoordinatorService.java b/android/app/src/com/android/bluetooth/csip/CsipSetCoordinatorService.java
index dec6db2e4b..d66dbc01e3 100644
--- a/android/app/src/com/android/bluetooth/csip/CsipSetCoordinatorService.java
+++ b/android/app/src/com/android/bluetooth/csip/CsipSetCoordinatorService.java
@@ -182,8 +182,13 @@ public class CsipSetCoordinatorService extends ProfileService {
}
if (mStateMachinesThread != null) {
- mStateMachinesThread.quitSafely();
- mStateMachinesThread = null;
+ try {
+ mStateMachinesThread.quitSafely();
+ mStateMachinesThread.join();
+ mStateMachinesThread = null;
+ } catch (InterruptedException e) {
+ // Do not rethrow as we are shutting down anyway
+ }
}
mDeviceGroupIdMap.clear();
diff --git a/android/app/src/com/android/bluetooth/hap/HapClientService.java b/android/app/src/com/android/bluetooth/hap/HapClientService.java
index b8aaab841b..dca14bfdc7 100644
--- a/android/app/src/com/android/bluetooth/hap/HapClientService.java
+++ b/android/app/src/com/android/bluetooth/hap/HapClientService.java
@@ -208,8 +208,13 @@ public class HapClientService extends ProfileService {
mPresetsMap.clear();
if (mStateMachinesThread != null) {
- mStateMachinesThread.quitSafely();
- mStateMachinesThread = null;
+ try {
+ mStateMachinesThread.quitSafely();
+ mStateMachinesThread.join();
+ mStateMachinesThread = null;
+ } catch (InterruptedException e) {
+ // Do not rethrow as we are shutting down anyway
+ }
}
// Clear AdapterService
diff --git a/android/app/src/com/android/bluetooth/hearingaid/HearingAidService.java b/android/app/src/com/android/bluetooth/hearingaid/HearingAidService.java
index 4f4a45ad6b..98cd2caadc 100644
--- a/android/app/src/com/android/bluetooth/hearingaid/HearingAidService.java
+++ b/android/app/src/com/android/bluetooth/hearingaid/HearingAidService.java
@@ -189,8 +189,13 @@ public class HearingAidService extends ProfileService {
mHiSyncIdConnectedMap.clear();
if (mStateMachinesThread != null) {
- mStateMachinesThread.quitSafely();
- mStateMachinesThread = null;
+ try {
+ mStateMachinesThread.quitSafely();
+ mStateMachinesThread.join();
+ mStateMachinesThread = null;
+ } catch (InterruptedException e) {
+ // Do not rethrow as we are shutting down anyway
+ }
}
// Clear AdapterService, HearingAidNativeInterface
diff --git a/android/app/src/com/android/bluetooth/hfp/HeadsetService.java b/android/app/src/com/android/bluetooth/hfp/HeadsetService.java
index b4eca8f538..361e247cdd 100644
--- a/android/app/src/com/android/bluetooth/hfp/HeadsetService.java
+++ b/android/app/src/com/android/bluetooth/hfp/HeadsetService.java
@@ -236,8 +236,14 @@ public class HeadsetService extends ProfileService {
// Step 3: Destroy system interface
mSystemInterface.stop();
// Step 2: Stop handler thread
- mStateMachinesThread.quitSafely();
- mStateMachinesThread = null;
+ try {
+ mStateMachinesThread.quitSafely();
+ mStateMachinesThread.join();
+ mStateMachinesThread = null;
+ } catch (InterruptedException e) {
+ // Do not rethrow as we are shutting down anyway
+ }
+
mStateMachinesThreadHandler = null;
// Step 1: Clear
synchronized (mStateMachines) {
diff --git a/android/app/src/com/android/bluetooth/le_audio/LeAudioService.java b/android/app/src/com/android/bluetooth/le_audio/LeAudioService.java
index a94a5687c1..e6d06e2e25 100644
--- a/android/app/src/com/android/bluetooth/le_audio/LeAudioService.java
+++ b/android/app/src/com/android/bluetooth/le_audio/LeAudioService.java
@@ -260,8 +260,13 @@ public class LeAudioService extends ProfileService {
}
if (mStateMachinesThread != null) {
- mStateMachinesThread.quitSafely();
- mStateMachinesThread = null;
+ try {
+ mStateMachinesThread.quitSafely();
+ mStateMachinesThread.join();
+ mStateMachinesThread = null;
+ } catch (InterruptedException e) {
+ // Do not rethrow as we are shutting down anyway
+ }
}
mAudioManager = null;
diff --git a/android/app/src/com/android/bluetooth/vc/VolumeControlService.java b/android/app/src/com/android/bluetooth/vc/VolumeControlService.java
index 6b09d87471..732679a366 100644
--- a/android/app/src/com/android/bluetooth/vc/VolumeControlService.java
+++ b/android/app/src/com/android/bluetooth/vc/VolumeControlService.java
@@ -179,8 +179,13 @@ public class VolumeControlService extends ProfileService {
if (mStateMachinesThread != null) {
- mStateMachinesThread.quitSafely();
- mStateMachinesThread = null;
+ try {
+ mStateMachinesThread.quitSafely();
+ mStateMachinesThread.join();
+ mStateMachinesThread = null;
+ } catch (InterruptedException e) {
+ // Do not rethrow as we are shutting down anyway
+ }
}
// Clear AdapterService, VolumeControlNativeInterface
diff --git a/android/app/tests/unit/src/com/android/bluetooth/a2dp/A2dpStateMachineTest.java b/android/app/tests/unit/src/com/android/bluetooth/a2dp/A2dpStateMachineTest.java
index b38c8423c2..2530facca4 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/a2dp/A2dpStateMachineTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/a2dp/A2dpStateMachineTest.java
@@ -122,6 +122,7 @@ public class A2dpStateMachineTest {
}
mA2dpStateMachine.doQuit();
mHandlerThread.quit();
+ mHandlerThread.join();
TestUtils.clearAdapterService(mAdapterService);
}