Fix resource leaks in drm hal
bug:36408047
test: manual tests to verify leaks are fixed
Change-Id: Idd79e99e211d81f8b3e58cf52c9b01ce9d370dc4
diff --git a/drm/1.0/default/DrmPlugin.cpp b/drm/1.0/default/DrmPlugin.cpp
index 1695ef7..1feec0a 100644
--- a/drm/1.0/default/DrmPlugin.cpp
+++ b/drm/1.0/default/DrmPlugin.cpp
@@ -327,24 +327,27 @@
Return<void> DrmPlugin::sendEvent(EventType eventType,
const hidl_vec<uint8_t>& sessionId, const hidl_vec<uint8_t>& data) {
- if (mListener != nullptr) {
- mListener->sendEvent(eventType, sessionId, data);
+ auto listener = mListener.promote();
+ if (listener != nullptr) {
+ listener->sendEvent(eventType, sessionId, data);
}
return Void();
}
Return<void> DrmPlugin::sendExpirationUpdate(
const hidl_vec<uint8_t>& sessionId, int64_t expiryTimeInMS) {
- if (mListener != nullptr) {
- mListener->sendExpirationUpdate(sessionId, expiryTimeInMS);
+ auto listener = mListener.promote();
+ if (listener != nullptr) {
+ listener->sendExpirationUpdate(sessionId, expiryTimeInMS);
}
return Void();
}
Return<void> DrmPlugin::sendKeysChange(const hidl_vec<uint8_t>& sessionId,
const hidl_vec<KeyStatus>& keyStatusList, bool hasNewUsableKey) {
- if (mListener != nullptr) {
- mListener->sendKeysChange(sessionId, keyStatusList, hasNewUsableKey);
+ auto listener = mListener.promote();
+ if (listener != nullptr) {
+ listener->sendKeysChange(sessionId, keyStatusList, hasNewUsableKey);
}
return Void();
}
@@ -380,15 +383,21 @@
}
if (sendEvent) {
Vector<uint8_t> emptyVector;
- mListener->sendEvent(eventType,
- toHidlVec(sessionId == NULL ? emptyVector: *sessionId),
- toHidlVec(data == NULL ? emptyVector: *data));
+ auto listener = mListener.promote();
+ if (listener != nullptr) {
+ listener->sendEvent(eventType,
+ toHidlVec(sessionId == NULL ? emptyVector: *sessionId),
+ toHidlVec(data == NULL ? emptyVector: *data));
+ }
}
}
void DrmPlugin::sendExpirationUpdate(Vector<uint8_t> const *sessionId,
int64_t expiryTimeInMS) {
- mListener->sendExpirationUpdate(toHidlVec(*sessionId), expiryTimeInMS);
+ auto listener = mListener.promote();
+ if (listener != nullptr) {
+ listener->sendExpirationUpdate(toHidlVec(*sessionId), expiryTimeInMS);
+ }
}
void DrmPlugin::sendKeysChange(Vector<uint8_t> const *sessionId,
@@ -424,8 +433,11 @@
keyStatus.keyId = toHidlVec(legacyKeyStatus.mKeyId);
keyStatusVec.push_back(keyStatus);
}
- mListener->sendKeysChange(toHidlVec(*sessionId),
- toHidlVec(keyStatusVec), hasNewUsableKey);
+ auto listener = mListener.promote();
+ if (listener != nullptr) {
+ listener->sendKeysChange(toHidlVec(*sessionId),
+ toHidlVec(keyStatusVec), hasNewUsableKey);
+ }
}
} // namespace implementation