diff options
Diffstat (limited to 'drm/libmediadrm/DrmHal.cpp')
| -rw-r--r-- | drm/libmediadrm/DrmHal.cpp | 39 |
1 files changed, 28 insertions, 11 deletions
diff --git a/drm/libmediadrm/DrmHal.cpp b/drm/libmediadrm/DrmHal.cpp index 386546f2ab..074489a93f 100644 --- a/drm/libmediadrm/DrmHal.cpp +++ b/drm/libmediadrm/DrmHal.cpp @@ -245,6 +245,11 @@ sp<IDrmPlugin> DrmHal::makeDrmPlugin(const sp<IDrmFactory>& factory, plugin = hPlugin; } ); + + if (!hResult.isOk()) { + ALOGE("createPlugin remote call failed"); + } + return plugin; } @@ -396,8 +401,11 @@ status_t DrmHal::createPlugin(const uint8_t uuid[16], if (mPlugin == NULL) { mInitCheck = ERROR_UNSUPPORTED; } else { - mInitCheck = OK; - mPlugin->setListener(this); + if (!mPlugin->setListener(this).isOk()) { + mInitCheck = DEAD_OBJECT; + } else { + mInitCheck = OK; + } } return mInitCheck; @@ -411,12 +419,14 @@ status_t DrmHal::destroyPlugin() { } 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; } @@ -472,11 +482,14 @@ status_t DrmHal::closeSession(Vector<uint8_t> const &sessionId) { return mInitCheck; } - Status status = mPlugin->closeSession(toHidlVec(sessionId)); - if (status == Status::OK) { - DrmSessionManager::Instance()->removeSession(sessionId); + Return<Status> status = mPlugin->closeSession(toHidlVec(sessionId)); + if (status.isOk()) { + if (status == Status::OK) { + DrmSessionManager::Instance()->removeSession(sessionId); + } + return toStatusT(status); } - return toStatusT(status); + return DEAD_OBJECT; } status_t DrmHal::getKeyRequest(Vector<uint8_t> const &sessionId, @@ -962,12 +975,16 @@ status_t DrmHal::signRSA(Vector<uint8_t> const &sessionId, void DrmHal::binderDied(const wp<IBinder> &the_late_who __unused) { Mutex::Autolock autoLock(mLock); + 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) |
