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

Commit 319d5f43 authored by Jeff Tinker's avatar Jeff Tinker
Browse files

Fix failure to check HIDL return status

Test: run Play Movies and repeat killing
  android.hardware.drm@1.0-service.widevine, check
  log for transaction failed messages.  This uncovered
  a related problem in closeSession which is also fixed
  in this CL.

bug: 64022042
Change-Id: I4e86414aa1625c35689339389391e9fa6d377b1c
parent a63b4da5
Loading
Loading
Loading
Loading
+27 −16
Original line number Diff line number Diff line
@@ -407,9 +407,12 @@ status_t DrmHal::createPlugin(const uint8_t uuid[16],

    if (mPlugin == NULL) {
        mInitCheck = ERROR_UNSUPPORTED;
    } else {
        if (!mPlugin->setListener(this).isOk()) {
            mInitCheck = DEAD_OBJECT;
        } else {
            mInitCheck = OK;
        mPlugin->setListener(this);
        }
    }

    return mInitCheck;
@@ -424,12 +427,14 @@ status_t DrmHal::destroyPlugin() {
    closeOpenSessions();
    reportMetrics();
    setListener(NULL);
    mInitCheck = NO_INIT;

    if (mPlugin != NULL) {
        mPlugin->setListener(NULL);
        if (!mPlugin->setListener(NULL).isOk()) {
            mInitCheck = DEAD_OBJECT;
        }
    }
    mPlugin.clear();
    mInitCheck = NO_INIT;

    return OK;
}

@@ -486,7 +491,8 @@ status_t DrmHal::closeSession(Vector<uint8_t> const &sessionId) {
        return mInitCheck;
    }

    Status status = mPlugin->closeSession(toHidlVec(sessionId));
    Return<Status> status = mPlugin->closeSession(toHidlVec(sessionId));
    if (status.isOk()) {
        if (status == Status::OK) {
            DrmSessionManager::Instance()->removeSession(sessionId);
            for (size_t i = 0; i < mOpenSessions.size(); i++) {
@@ -499,6 +505,8 @@ status_t DrmHal::closeSession(Vector<uint8_t> const &sessionId) {
        reportMetrics();
        return toStatusT(status);
    }
    return DEAD_OBJECT;
}

status_t DrmHal::getKeyRequest(Vector<uint8_t> const &sessionId,
        Vector<uint8_t> const &initData, String8 const &mimeType,
@@ -997,11 +1005,14 @@ void DrmHal::binderDied(const wp<IBinder> &the_late_who __unused)
    Mutex::Autolock autoLock(mLock);
    closeOpenSessions();
    setListener(NULL);
    mInitCheck = NO_INIT;

    if (mPlugin != NULL) {
        mPlugin->setListener(NULL);
        if (!mPlugin->setListener(NULL).isOk()) {
            mInitCheck = DEAD_OBJECT;
        }
    }
    mPlugin.clear();
    mInitCheck = NO_INIT;
}

void DrmHal::writeByteArray(Parcel &obj, hidl_vec<uint8_t> const &vec)