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

Commit 419249b7 authored by Mikhail Naganov's avatar Mikhail Naganov Committed by Android (Google) Code Review
Browse files

Merge "Crash audioserver if EPIPE (DEAD_OBJECT) is received from the HAL"

parents 907c814e 9f57e3c9
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -82,9 +82,16 @@ status_t ConversionHelperHidl::analyzeResult(const Result& result) {
    }
}

// static
void ConversionHelperHidl::crashIfHalIsDead(const Status& status) {
    LOG_ALWAYS_FATAL_IF(
            status.transactionError() == DEAD_OBJECT, "HAL server crashed, need to restart");
}

status_t ConversionHelperHidl::processReturn(const char* funcName, const Status& status) {
    const status_t st = status.transactionError();
    ALOGE_IF(st, "%s %p %s: %s (from rpc)", mClassName, this, funcName, strerror(-st));
    crashIfHalIsDead(status);
    return st;
}

@@ -93,6 +100,7 @@ status_t ConversionHelperHidl::processReturn(
    const status_t st = status.isOk() ? analyzeResult(retval) : status.transactionError();
    ALOGE_IF(!status.isOk() && st, "%s %p %s: %s (from rpc)",
            mClassName, this, funcName, strerror(-st));
    crashIfHalIsDead(status);
    return st;
}

+3 −0
Original line number Diff line number Diff line
@@ -30,6 +30,9 @@ using ::android::hardware::hidl_vec;
namespace android {

class ConversionHelperHidl {
  public:
    static void crashIfHalIsDead(const Status& status);

  protected:
    static status_t keysFromHal(const String8& keys, hidl_vec<hidl_string> *hidlKeys);
    static status_t parametersFromHal(const String8& kvPairs, hidl_vec<ParameterValue> *hidlParams);
+2 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@
#include <android/hardware/audio/2.0/IDevice.h>
#include <utils/Log.h>

#include "ConversionHelperHidl.h"
#include "DeviceHalHidl.h"
#include "DevicesFactoryHalHidl.h"

@@ -82,6 +83,7 @@ status_t DevicesFactoryHalHidl::openDevice(const char *name, sp<DeviceHalInterfa
        else if (retval == Result::INVALID_ARGUMENTS) return BAD_VALUE;
        else return NO_INIT;
    }
    ConversionHelperHidl::crashIfHalIsDead(ret.getStatus());
    return ret.getStatus().transactionError();
}

+2 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
#include <media/EffectsFactoryApi.h>
#include <utils/Log.h>

#include "ConversionHelperHidl.h"
#include "EffectHalHidl.h"
#include "HidlUtils.h"

@@ -102,6 +103,7 @@ status_t EffectHalHidl::getDescriptor(effect_descriptor_t *pDescriptor) {
                    effectDescriptorToHal(result, pDescriptor);
                }
            });
    ConversionHelperHidl::crashIfHalIsDead(ret.getStatus());
    return ret.getStatus().isOk() ? analyzeResult(retval) : ret.getStatus().transactionError();
}

+5 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
#include <cutils/native_handle.h>
#include <media/EffectsFactoryApi.h>

#include "ConversionHelperHidl.h"
#include "EffectHalHidl.h"
#include "EffectsFactoryHalHidl.h"
#include "HidlUtils.h"
@@ -63,6 +64,7 @@ status_t EffectsFactoryHalHidl::queryAllDescriptors() {
        return retval == Result::OK ? OK : NO_INIT;
    }
    mLastDescriptors.resize(0);
    ConversionHelperHidl::crashIfHalIsDead(ret.getStatus());
    return ret.getStatus().transactionError();
}

@@ -107,6 +109,7 @@ status_t EffectsFactoryHalHidl::getDescriptor(
        else if (retval == Result::INVALID_ARGUMENTS) return NAME_NOT_FOUND;
        else return NO_INIT;
    }
    ConversionHelperHidl::crashIfHalIsDead(ret.getStatus());
    return ret.getStatus().transactionError();
}

@@ -130,6 +133,7 @@ status_t EffectsFactoryHalHidl::createEffect(
        else if (retval == Result::INVALID_ARGUMENTS) return NAME_NOT_FOUND;
        else return NO_INIT;
    }
    ConversionHelperHidl::crashIfHalIsDead(ret.getStatus());
    return ret.getStatus().transactionError();
}

@@ -139,6 +143,7 @@ status_t EffectsFactoryHalHidl::dumpEffects(int fd) {
    hidlHandle->data[0] = fd;
    Return<void> ret = mEffectsFactory->debugDump(hidlHandle);
    native_handle_delete(hidlHandle);
    ConversionHelperHidl::crashIfHalIsDead(ret.getStatus());
    return ret.getStatus().transactionError();
}

Loading