diff options
author | Jeff Tinker <jtinker@google.com> | 2013-07-07 12:28:46 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2013-07-07 12:28:46 -0700 |
commit | 69adec56fe13a2154cf9388c6e8725c6b6861b74 (patch) | |
tree | 049b4b7c7e497eea69f2f4bef3b22a62f78e2464 /media/libmediaplayerservice | |
parent | 20ed5f444c149c49d0e599da09e5cec1e5cc6051 (diff) | |
parent | 9a25c012915f2209fff1479b246ae8eba38c3eff (diff) | |
download | frameworks_av-69adec56fe13a2154cf9388c6e8725c6b6861b74.zip frameworks_av-69adec56fe13a2154cf9388c6e8725c6b6861b74.tar.gz frameworks_av-69adec56fe13a2154cf9388c6e8725c6b6861b74.tar.bz2 |
am 9a25c012: am eced745a: Merge "Part of fix for TEE resource leaks when app crashes" into jb-mr2-dev
* commit '9a25c012915f2209fff1479b246ae8eba38c3eff':
Part of fix for TEE resource leaks when app crashes
Diffstat (limited to 'media/libmediaplayerservice')
-rw-r--r-- | media/libmediaplayerservice/Drm.cpp | 14 | ||||
-rw-r--r-- | media/libmediaplayerservice/Drm.h | 6 |
2 files changed, 19 insertions, 1 deletions
diff --git a/media/libmediaplayerservice/Drm.cpp b/media/libmediaplayerservice/Drm.cpp index 1e6cd94..f00f488 100644 --- a/media/libmediaplayerservice/Drm.cpp +++ b/media/libmediaplayerservice/Drm.cpp @@ -71,6 +71,12 @@ status_t Drm::initCheck() const { status_t Drm::setListener(const sp<IDrmClient>& listener) { Mutex::Autolock lock(mEventLock); + if (mListener != NULL){ + mListener->asBinder()->unlinkToDeath(this); + } + if (listener != NULL) { + listener->asBinder()->linkToDeath(this); + } mListener = listener; return NO_ERROR; } @@ -576,4 +582,12 @@ status_t Drm::verify(Vector<uint8_t> const &sessionId, return mPlugin->verify(sessionId, keyId, message, signature, match); } +void Drm::binderDied(const wp<IBinder> &the_late_who) +{ + delete mPlugin; + mPlugin = NULL; + closeFactory(); + mListener.clear(); +} + } // namespace android diff --git a/media/libmediaplayerservice/Drm.h b/media/libmediaplayerservice/Drm.h index 3da8ad4..3f460f1 100644 --- a/media/libmediaplayerservice/Drm.h +++ b/media/libmediaplayerservice/Drm.h @@ -29,7 +29,9 @@ namespace android { struct DrmFactory; struct DrmPlugin; -struct Drm : public BnDrm, public DrmPluginListener { +struct Drm : public BnDrm, + public IBinder::DeathRecipient, + public DrmPluginListener { Drm(); virtual ~Drm(); @@ -115,6 +117,8 @@ struct Drm : public BnDrm, public DrmPluginListener { Vector<uint8_t> const *sessionId, Vector<uint8_t> const *data); + virtual void binderDied(const wp<IBinder> &the_late_who); + private: mutable Mutex mLock; |