OSDN Git Service

Fix failure to check HIDL return status
authorJeff Tinker <jtinker@google.com>
Wed, 26 Jul 2017 22:44:33 +0000 (15:44 -0700)
committerJeff Tinker <jtinker@google.com>
Thu, 3 Aug 2017 19:48:58 +0000 (12:48 -0700)
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
Merged-In: I4e86414aa1625c35689339389391e9fa6d377b1c

drm/libmediadrm/DrmHal.cpp

index 386546f..2b7987a 100644 (file)
@@ -396,8 +396,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 +414,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 +477,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 +970,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)