Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8ebba5cb authored by riddle_hsu's avatar riddle_hsu Committed by Riddle Hsu
Browse files

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
parent 59d548e1
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -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 "