summaryrefslogtreecommitdiffstats
path: root/media/libmediaplayerservice
diff options
context:
space:
mode:
authorJeff Tinker <jtinker@google.com>2013-07-07 12:28:46 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2013-07-07 12:28:46 -0700
commit69adec56fe13a2154cf9388c6e8725c6b6861b74 (patch)
tree049b4b7c7e497eea69f2f4bef3b22a62f78e2464 /media/libmediaplayerservice
parent20ed5f444c149c49d0e599da09e5cec1e5cc6051 (diff)
parent9a25c012915f2209fff1479b246ae8eba38c3eff (diff)
downloadframeworks_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.cpp14
-rw-r--r--media/libmediaplayerservice/Drm.h6
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;