From c3de5db6451361eeee0a28bfd91132ca809ac16b Mon Sep 17 00:00:00 2001 From: Atneya Nair Date: Mon, 8 May 2023 10:54:17 -0700 Subject: [PATCH] Catch STHAL factory exceptions The ST HAL factory may throw on back-to-back HAL process deaths. Loop until the factory successfully creates. Bug: 271058477 Test: AlwaysOnHotwordDetectorTest Test: Successful attach on boot, audioserver death Change-Id: Ifeb84d604cd0330cd0f9f2e11aa8cb6e14bc7b26 --- .../SoundTriggerModule.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerModule.java b/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerModule.java index f70268e1848ad..e793f317d41f9 100644 --- a/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerModule.java +++ b/services/voiceinteraction/java/com/android/server/soundtrigger_middleware/SoundTriggerModule.java @@ -168,9 +168,18 @@ class SoundTriggerModule implements IBinder.DeathRecipient, ISoundTriggerHal.Glo * Attached to the HAL service via factory. */ private void attachToHal() { - mHalService = new SoundTriggerHalEnforcer( - new SoundTriggerHalWatchdog( - new SoundTriggerDuplicateModelHandler(mHalFactory.create()))); + mHalService = null; + while (mHalService == null) { + try { + mHalService = new SoundTriggerHalEnforcer( + new SoundTriggerHalWatchdog( + new SoundTriggerDuplicateModelHandler(mHalFactory.create()))); + } catch (RuntimeException e) { + if (!(e.getCause() instanceof RemoteException)) { + throw e; + } + } + } mHalService.linkToDeath(this); mHalService.registerCallback(this); mProperties = mHalService.getProperties();