Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5749d1a3 authored by Mikhail Naganov's avatar Mikhail Naganov Committed by gitbuildkicker
Browse files

audiohal: Restart audioserver if HAL services can't be obtained

HAL services are crucial for the audioflinger to work.
If for some reason device or effect factories can't be obtained,
log a error message and crash af. If the problem with obtaining
services is transient, restarting af helps to restore audio.

Bug: 36153684
Change-Id: Iec17a6c6e19650cf1d1de1ec30caf05753b9bce1
Test: reproed the bug, checked that af restarts and finds devices
(cherry picked from commit 425a5028)
parent aaef5ef1
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -41,9 +41,11 @@ sp<DevicesFactoryHalInterface> DevicesFactoryHalInterface::create() {
DevicesFactoryHalHidl::DevicesFactoryHalHidl() {
    mDevicesFactory = IDevicesFactory::getService();
    if (mDevicesFactory != 0) {
        // It is assumet that DevicesFactory is owned by AudioFlinger
        // It is assumed that DevicesFactory is owned by AudioFlinger
        // and thus have the same lifespan.
        mDevicesFactory->linkToDeath(HalDeathHandler::getInstance(), 0 /*cookie*/);
    } else {
        LOG_ALWAYS_FATAL("Failed to obtain IDevicesFactory service");
    }
}

+1 −0
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ bool EffectsFactoryHalInterface::isNullUuid(const effect_uuid_t *pEffectUuid) {

EffectsFactoryHalHidl::EffectsFactoryHalHidl() : ConversionHelperHidl("EffectsFactory") {
    mEffectsFactory = IEffectsFactory::getService();
    LOG_ALWAYS_FATAL_IF(mEffectsFactory == 0, "Failed to obtain IEffectsFactory service");
}

EffectsFactoryHalHidl::~EffectsFactoryHalHidl() {