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