diff options
author | Gloria Wang <gwang@google.com> | 2011-03-15 10:52:28 -0700 |
---|---|---|
committer | Gloria Wang <gwang@google.com> | 2011-03-15 11:17:22 -0700 |
commit | 8d2577b9ac2f95f218db59a78447efd3c6a742dd (patch) | |
tree | 615cb3a9b4108444458d9d46858794fbed8d504b /drm/libdrmframework/DrmManagerClientImpl.cpp | |
parent | 8b9a9067511efca72ca872d689e30315c1450f94 (diff) | |
download | frameworks_av-8d2577b9ac2f95f218db59a78447efd3c6a742dd.zip frameworks_av-8d2577b9ac2f95f218db59a78447efd3c6a742dd.tar.gz frameworks_av-8d2577b9ac2f95f218db59a78447efd3c6a742dd.tar.bz2 |
Bug fixes of DRM framework.
- Add death listener to clean-up drmserver appropriately
when drmserver died.
- Remove "static" declaration of mUniqueIdVector because it was not
needed to be static variable.
- Remove "class DrmContentIds;" because the class does not exist.
- contentPath in saveRights() could be empty because
it is not required by some DRM schemes.
- Fix naming convention to use sXXX for static variables.
- Fix typo
Change-Id: I7d440488fc074c200f1009d1bafafeffebd690b2
Diffstat (limited to 'drm/libdrmframework/DrmManagerClientImpl.cpp')
-rw-r--r-- | drm/libdrmframework/DrmManagerClientImpl.cpp | 37 |
1 files changed, 25 insertions, 12 deletions
diff --git a/drm/libdrmframework/DrmManagerClientImpl.cpp b/drm/libdrmframework/DrmManagerClientImpl.cpp index e6ae220..a57dd98 100644 --- a/drm/libdrmframework/DrmManagerClientImpl.cpp +++ b/drm/libdrmframework/DrmManagerClientImpl.cpp @@ -28,8 +28,9 @@ using namespace android; #define INVALID_VALUE -1 -Mutex DrmManagerClientImpl::mMutex; -sp<IDrmManagerService> DrmManagerClientImpl::mDrmManagerService; +Mutex DrmManagerClientImpl::sMutex; +sp<IDrmManagerService> DrmManagerClientImpl::sDrmManagerService; +sp<DrmManagerClientImpl::DeathNotifier> DrmManagerClientImpl::sDeathNotifier; const String8 DrmManagerClientImpl::EMPTY_STRING(""); DrmManagerClientImpl* DrmManagerClientImpl::create(int* pUniqueId) { @@ -47,8 +48,8 @@ void DrmManagerClientImpl::remove(int uniqueId) { } const sp<IDrmManagerService>& DrmManagerClientImpl::getDrmManagerService() { - mMutex.lock(); - if (NULL == mDrmManagerService.get()) { + Mutex::Autolock lock(sMutex); + if (NULL == sDrmManagerService.get()) { sp<IServiceManager> sm = defaultServiceManager(); sp<IBinder> binder; do { @@ -62,11 +63,13 @@ const sp<IDrmManagerService>& DrmManagerClientImpl::getDrmManagerService() { reqt.tv_nsec = 500000000; //0.5 sec nanosleep(&reqt, NULL); } while (true); - - mDrmManagerService = interface_cast<IDrmManagerService>(binder); + if (NULL == sDeathNotifier.get()) { + sDeathNotifier = new DeathNotifier(); + } + binder->linkToDeath(sDeathNotifier); + sDrmManagerService = interface_cast<IDrmManagerService>(binder); } - mMutex.unlock(); - return mDrmManagerService; + return sDrmManagerService; } void DrmManagerClientImpl::addClient(int uniqueId) { @@ -143,11 +146,8 @@ DrmInfo* DrmManagerClientImpl::acquireDrmInfo( status_t DrmManagerClientImpl::saveRights(int uniqueId, const DrmRights& drmRights, const String8& rightsPath, const String8& contentPath) { status_t status = DRM_ERROR_UNKNOWN; - if (EMPTY_STRING != contentPath) { - status = getDrmManagerService()->saveRights( + return getDrmManagerService()->saveRights( uniqueId, drmRights, rightsPath, contentPath); - } - return status; } String8 DrmManagerClientImpl::getOriginalMimeType( @@ -336,3 +336,16 @@ status_t DrmManagerClientImpl::notify(const DrmInfoEvent& event) { return DRM_NO_ERROR; } +DrmManagerClientImpl::DeathNotifier::~DeathNotifier() { + Mutex::Autolock lock(sMutex); + if (NULL != sDrmManagerService.get()) { + sDrmManagerService->asBinder()->unlinkToDeath(this); + } +} + +void DrmManagerClientImpl::DeathNotifier::binderDied(const wp<IBinder>& who) { + Mutex::Autolock lock(sMutex); + DrmManagerClientImpl::sDrmManagerService.clear(); + LOGW("DrmManager server died!"); +} + |