diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2022-02-11 07:29:40 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2022-02-11 07:29:40 +0000 |
commit | a342218e739d018049d0014ff249e128caa4907e (patch) | |
tree | b4df92e266cfe5a88c73a941f103c2cefe051233 | |
parent | 570864b11636e97f68f1cade4366ed46b0a15db8 (diff) | |
parent | adc9ed0f69e9e7db9f4326cf65c10e4982cea7c8 (diff) |
Merge "Fix concurrency issues on state machine shutdown"
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); } |