Merge "Fix ClearKey session leaks" into rvc-dev
diff --git a/drm/mediadrm/plugins/clearkey/hidl/DrmPlugin.cpp b/drm/mediadrm/plugins/clearkey/hidl/DrmPlugin.cpp
index 8b7f57d..f87f830 100644
--- a/drm/mediadrm/plugins/clearkey/hidl/DrmPlugin.cpp
+++ b/drm/mediadrm/plugins/clearkey/hidl/DrmPlugin.cpp
@@ -139,8 +139,13 @@
std::vector<uint8_t> sessionId = session->sessionId();
Status status = setSecurityLevel(sessionId, securityLevel);
+ if (status == Status::OK) {
+ mOpenSessionOkCount++;
+ } else {
+ mSessionLibrary->destroySession(session);
+ sessionId.clear();
+ }
_hidl_cb(status, toHidlVec(sessionId));
- mOpenSessionOkCount++;
return Void();
}
@@ -151,12 +156,12 @@
sp<Session> session = mSessionLibrary->findSession(toVector(sessionId));
if (session.get()) {
+ mSessionLibrary->destroySession(session);
if (session->getMockError() != Status_V1_2::OK) {
sendSessionLostState(sessionId);
return Status::ERROR_DRM_INVALID_STATE;
}
mCloseSessionOkCount++;
- mSessionLibrary->destroySession(session);
return Status::OK;
}
mCloseSessionNotOpenedCount++;
@@ -387,6 +392,7 @@
if (isOfflineLicense) {
if (isRelease) {
mFileHandle.DeleteLicense(keySetId);
+ mSessionLibrary->destroySession(session);
} else {
if (!makeKeySetId(&keySetId)) {
_hidl_cb(Status::ERROR_DRM_UNKNOWN, hidl_vec<uint8_t>());