From 7b5dd87351ac476dd872c51f9b819d2a3e572382 Mon Sep 17 00:00:00 2001 From: Jim Miller Date: Sun, 16 Oct 2011 12:46:06 -0700 Subject: [PATCH] Fix 5466793: Fix memory leak in system process when face lock is enabled. Previously, the code was not unregistering the callback when we unlocked the device, which kept a reference to LockPatternKeyguardView indirectly by a reference to mFaceLockCallback. It now correcly removes the callback when we unlock the device. Change-Id: Ie592d007a1dfc2416b9e8956aba2c34e3d0120ee --- .../internal/policy/IFaceLockInterface.aidl | 1 + .../policy/impl/LockPatternKeyguardView.java | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/core/java/com/android/internal/policy/IFaceLockInterface.aidl b/core/java/com/android/internal/policy/IFaceLockInterface.aidl index 921b8c7df88f7..3958cda6db1c3 100644 --- a/core/java/com/android/internal/policy/IFaceLockInterface.aidl +++ b/core/java/com/android/internal/policy/IFaceLockInterface.aidl @@ -23,4 +23,5 @@ interface IFaceLockInterface { void startUi(IBinder containingWindowToken, int x, int y, int width, int height); void stopUi(); void registerCallback(IFaceLockCallback cb); + void unregisterCallback(IFaceLockCallback cb); } diff --git a/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java b/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java index b91503bffb93b..ebf380a1f9fe2 100644 --- a/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java +++ b/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java @@ -782,6 +782,15 @@ public class LockPatternKeyguardView extends KeyguardViewBase implements Handler mUnlockScreen = null; } mUpdateMonitor.removeCallback(this); + if (mFaceLockService != null) { + try { + mFaceLockService.unregisterCallback(mFaceLockCallback); + } catch (RemoteException e) { + // Not much we can do + } + stopFaceLock(); + mFaceLockService = null; + } } private boolean isSecure() { @@ -1206,6 +1215,13 @@ public class LockPatternKeyguardView extends KeyguardViewBase implements Handler if (mBoundToFaceLockService) { if (DEBUG) Log.d(TAG, "before unbind from FaceLock service"); + if (mFaceLockService != null) { + try { + mFaceLockService.unregisterCallback(mFaceLockCallback); + } catch (RemoteException e) { + // Not much we can do + } + } mContext.unbindService(mFaceLockConnection); if (DEBUG) Log.d(TAG, "after unbind from FaceLock service"); mBoundToFaceLockService = false;