MediaSession: Use mHandler for sending a pending intent
When PendingIntent.send() is called with a null handler, onSendFinished() will be called inside of the send() method. Therefore in this case, if a thread holds a lock before calling send(), and onSendFinished() also requires the lock, a deadlock could happen. Change-Id: I71d9f708fc3d52b7b5713426ad6140cbf6e336ef
This commit is contained in:
@@ -764,7 +764,7 @@ public class MediaSessionService extends SystemService implements Monitor {
|
||||
synchronized (mLock) {
|
||||
// If we don't have a media button receiver to fall back on
|
||||
// include non-playing sessions for dispatching
|
||||
UserRecord ur = mUserRecords.get(ActivityManager.getCurrentUser());
|
||||
UserRecord ur = mUserRecords.get(mCurrentUserId);
|
||||
boolean useNotPlayingSessions = (ur == null) ||
|
||||
(ur.mLastMediaButtonReceiver == null
|
||||
&& ur.mRestoredMediaButtonReceiver == null);
|
||||
@@ -946,8 +946,7 @@ public class MediaSessionService extends SystemService implements Monitor {
|
||||
mKeyEventReceiver);
|
||||
} else {
|
||||
// Launch the last PendingIntent we had with priority
|
||||
int userId = ActivityManager.getCurrentUser();
|
||||
UserRecord user = mUserRecords.get(userId);
|
||||
UserRecord user = mUserRecords.get(mCurrentUserId);
|
||||
if (user.mLastMediaButtonReceiver != null
|
||||
|| user.mRestoredMediaButtonReceiver != null) {
|
||||
if (DEBUG) {
|
||||
@@ -964,11 +963,11 @@ public class MediaSessionService extends SystemService implements Monitor {
|
||||
if (user.mLastMediaButtonReceiver != null) {
|
||||
user.mLastMediaButtonReceiver.send(getContext(),
|
||||
needWakeLock ? mKeyEventReceiver.mLastTimeoutId : -1,
|
||||
mediaButtonIntent, mKeyEventReceiver, null);
|
||||
mediaButtonIntent, mKeyEventReceiver, mHandler);
|
||||
} else {
|
||||
mediaButtonIntent.setComponent(user.mRestoredMediaButtonReceiver);
|
||||
getContext().sendBroadcastAsUser(mediaButtonIntent,
|
||||
new UserHandle(userId));
|
||||
new UserHandle(mCurrentUserId));
|
||||
}
|
||||
} catch (CanceledException e) {
|
||||
Log.i(TAG, "Error sending key event to media button receiver "
|
||||
|
||||
Reference in New Issue
Block a user