diff options
author | Jae Seo <jaeseo@google.com> | 2015-08-04 11:12:13 -0700 |
---|---|---|
committer | Jae Seo <jaeseo@google.com> | 2015-08-04 13:30:56 -0700 |
commit | ac3f8e5534b1653a29714b63a3afbc6c1a90e669 (patch) | |
tree | 5b98754b777a5adcd34d258aaea5e0496b5e332e /services/core/java/com/android/server/media | |
parent | fad3c6638168ad65b4f4677a777b8f2dc7e5c9c9 (diff) | |
download | frameworks_base-ac3f8e5534b1653a29714b63a3afbc6c1a90e669.zip frameworks_base-ac3f8e5534b1653a29714b63a3afbc6c1a90e669.tar.gz frameworks_base-ac3f8e5534b1653a29714b63a3afbc6c1a90e669.tar.bz2 |
Unregister the existing callback when MediaProjection stops
Also removed the unnecessary lock in binderDied.
Bug: 22812934
Change-Id: Ief8856276dbd45a4afa632e51df18bd7d60e6bb1
Diffstat (limited to 'services/core/java/com/android/server/media')
-rw-r--r-- | services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java b/services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java index a029b0e..3ea4f2c 100644 --- a/services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java +++ b/services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java @@ -127,9 +127,7 @@ public final class MediaProjectionManagerService extends SystemService IBinder.DeathRecipient deathRecipient = new IBinder.DeathRecipient() { @Override public void binderDied() { - synchronized (mLock) { - removeCallback(callback); - } + removeCallback(callback); } }; synchronized (mLock) { @@ -344,6 +342,7 @@ public final class MediaProjectionManagerService extends SystemService public final String packageName; public final UserHandle userHandle; + private IMediaProjectionCallback mCallback; private IBinder mToken; private IBinder.DeathRecipient mDeathEater; private int mType; @@ -406,7 +405,8 @@ public final class MediaProjectionManagerService extends SystemService throw new IllegalStateException( "Cannot start already started MediaProjection"); } - registerCallback(callback); + mCallback = callback; + registerCallback(mCallback); try { mToken = callback.asBinder(); mDeathEater = new IBinder.DeathRecipient() { @@ -435,8 +435,11 @@ public final class MediaProjectionManagerService extends SystemService + "pid=" + Binder.getCallingPid() + ")"); return; } - mToken.unlinkToDeath(mDeathEater, 0); stopProjectionLocked(this); + mToken.unlinkToDeath(mDeathEater, 0); + mToken = null; + unregisterCallback(mCallback); + mCallback = null; } } |