summaryrefslogtreecommitdiffstats
path: root/services/core/java/com/android/server/media
diff options
context:
space:
mode:
authorJae Seo <jaeseo@google.com>2015-08-04 11:12:13 -0700
committerJae Seo <jaeseo@google.com>2015-08-04 13:30:56 -0700
commitac3f8e5534b1653a29714b63a3afbc6c1a90e669 (patch)
tree5b98754b777a5adcd34d258aaea5e0496b5e332e /services/core/java/com/android/server/media
parentfad3c6638168ad65b4f4677a777b8f2dc7e5c9c9 (diff)
downloadframeworks_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.java13
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;
}
}