From f35f6be32fb9e3ea040bb190b5414c7a5b988a6c Mon Sep 17 00:00:00 2001 From: Ronghua Wu Date: Wed, 13 May 2015 10:33:21 -0700 Subject: libmediaplayerservice: unlock before trying to reclaim drm session. Bug: 21086224 Change-Id: Icebd8eab70570e818ff7f5fc3a32e1801c3b92d2 --- media/libmediaplayerservice/Drm.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/media/libmediaplayerservice/Drm.cpp b/media/libmediaplayerservice/Drm.cpp index d55482d..a7f6f8b 100644 --- a/media/libmediaplayerservice/Drm.cpp +++ b/media/libmediaplayerservice/Drm.cpp @@ -358,7 +358,18 @@ status_t Drm::openSession(Vector &sessionId) { status_t err = mPlugin->openSession(sessionId); if (err == ERROR_DRM_RESOURCE_BUSY) { bool retry = false; + mLock.unlock(); + // reclaimSession may call back to closeSession, since mLock is shared between Drm + // instances, we should unlock here to avoid deadlock. retry = DrmSessionManager::Instance()->reclaimSession(getCallingPid()); + mLock.lock(); + if (mInitCheck != OK) { + return mInitCheck; + } + + if (mPlugin == NULL) { + return -EINVAL; + } if (retry) { err = mPlugin->openSession(sessionId); } -- cgit v1.1