Clear calling identity in finish callback

Test: go/wm-smoke
Fixes: 76138720
Change-Id: Id6b1afd757d4374a401abe4ee68fe99ed182a62e
This commit is contained in:
Jorim Jaggi
2018-03-27 13:06:09 +02:00
parent c6d9f7ce1d
commit ab20e1623b

View File

@@ -16,14 +16,15 @@
package com.android.server.wm;
import static com.android.server.wm.AnimationAdapterProto.REMOTE;
import static com.android.server.wm.RemoteAnimationAdapterWrapperProto.TARGET;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_APP_TRANSITIONS;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
import static com.android.server.wm.AnimationAdapterProto.REMOTE;
import static com.android.server.wm.RemoteAnimationAdapterWrapperProto.TARGET;
import android.graphics.Point;
import android.graphics.Rect;
import android.os.Binder;
import android.os.Handler;
import android.os.RemoteException;
import android.os.SystemClock;
@@ -194,12 +195,17 @@ class RemoteAnimationController {
@Override
public void onAnimationFinished() throws RemoteException {
if (mOuter != null) {
mOuter.onAnimationFinished();
final long token = Binder.clearCallingIdentity();
try {
if (mOuter != null) {
mOuter.onAnimationFinished();
// In case the client holds on to the finish callback, make sure we don't leak
// RemoteAnimationController which in turn would leak the runner on the client.
mOuter = null;
// In case the client holds on to the finish callback, make sure we don't leak
// RemoteAnimationController which in turn would leak the runner on the client.
mOuter = null;
}
} finally {
Binder.restoreCallingIdentity(token);
}
}