AudioPolicyService: add check when creating the spatializer
Add a null pointer check on mAudioPolicyManager before calling
canBeVirtualized() in onFirstRef() to avoid continuous audioserver
crashes when a failure to init the audio HAL occurs.
Bug: 201230333
Test: make and boot
Change-Id: Idcf21e3ac2e6e3fdbdcb4f68217abdc15f9166e5
diff --git a/services/audiopolicy/service/AudioPolicyService.cpp b/services/audiopolicy/service/AudioPolicyService.cpp
index de71a00..102b376 100644
--- a/services/audiopolicy/service/AudioPolicyService.cpp
+++ b/services/audiopolicy/service/AudioPolicyService.cpp
@@ -142,11 +142,14 @@
sensorPrivacyPolicy->registerSelf();
// Create spatializer if supported
- const audio_attributes_t attr = attributes_initializer(AUDIO_USAGE_MEDIA);
- AudioDeviceTypeAddrVector devices;
- bool hasSpatializer = mAudioPolicyManager->canBeSpatialized(&attr, nullptr, devices);
- if (hasSpatializer) {
- mSpatializer = Spatializer::create(this);
+ if (mAudioPolicyManager != nullptr) {
+ Mutex::Autolock _l(mLock);
+ const audio_attributes_t attr = attributes_initializer(AUDIO_USAGE_MEDIA);
+ AudioDeviceTypeAddrVector devices;
+ bool hasSpatializer = mAudioPolicyManager->canBeSpatialized(&attr, nullptr, devices);
+ if (hasSpatializer) {
+ mSpatializer = Spatializer::create(this);
+ }
}
AudioSystem::audioPolicyReady();
}
@@ -381,6 +384,7 @@
Mutex::Autolock _l(mLock);
if (mSpatializer != nullptr) {
+ // Note: mSpatializer != nullptr => mAudioPolicyManager != nullptr
if (mSpatializer->getLevel() != media::SpatializationLevel::NONE) {
audio_io_handle_t currentOutput = mSpatializer->getOutput();
audio_io_handle_t newOutput;