diff --git a/libwvdrmengine/mediadrm/include_hidl/WVDrmPlugin.h b/libwvdrmengine/mediadrm/include_hidl/WVDrmPlugin.h index 1aa89a46..e14e3588 100644 --- a/libwvdrmengine/mediadrm/include_hidl/WVDrmPlugin.h +++ b/libwvdrmengine/mediadrm/include_hidl/WVDrmPlugin.h @@ -38,6 +38,7 @@ using ::android::hardware::hidl_string; using ::android::hardware::hidl_vec; using ::android::hardware::Return; using ::android::sp; +using ::android::wp; using android::status_t; using std::map; @@ -350,7 +351,7 @@ struct WVDrmPlugin : public IDrmPlugin, IDrmPluginListener, sp const mCDM; WVGenericCryptoInterface* mCrypto; map mCryptoSessions; - sp mListener; + wp mListener; status_t queryProperty(const std::string& property, std::string& stringValue) const; diff --git a/libwvdrmengine/mediadrm/src_hidl/WVDrmPlugin.cpp b/libwvdrmengine/mediadrm/src_hidl/WVDrmPlugin.cpp index bcbe9903..1dee072d 100644 --- a/libwvdrmengine/mediadrm/src_hidl/WVDrmPlugin.cpp +++ b/libwvdrmengine/mediadrm/src_hidl/WVDrmPlugin.cpp @@ -1122,8 +1122,9 @@ Return WVDrmPlugin::setListener(const sp& listener) { Return WVDrmPlugin::sendEvent( EventType eventType, const hidl_vec& sessionId, const hidl_vec& data) { - if (mListener != NULL) { - mListener->sendEvent(eventType, sessionId, data); + auto listener = mListener.promote(); + if (listener != NULL) { + listener->sendEvent(eventType, sessionId, data); } else { ALOGE("Null event listener, event not sent"); } @@ -1133,8 +1134,9 @@ Return WVDrmPlugin::sendEvent( Return WVDrmPlugin::sendExpirationUpdate( const hidl_vec& sessionId, int64_t expiryTimeInMS) { - if (mListener != NULL) { - mListener->sendExpirationUpdate(sessionId, expiryTimeInMS); + auto listener = mListener.promote(); + if (listener != NULL) { + listener->sendExpirationUpdate(sessionId, expiryTimeInMS); } else { ALOGE("Null event listener, event not sent"); } @@ -1144,8 +1146,9 @@ Return WVDrmPlugin::sendExpirationUpdate( Return WVDrmPlugin::sendKeysChange( const hidl_vec& sessionId, const hidl_vec& keyStatusList, bool hasNewUsableKey) { - if (mListener != NULL) { - mListener->sendKeysChange(sessionId, keyStatusList, hasNewUsableKey); + auto listener = mListener.promote(); + if (listener != NULL) { + listener->sendKeysChange(sessionId, keyStatusList, hasNewUsableKey); } else { ALOGE("Null event listener, event not sent"); }