From fff2fda0199dedbf1079454dca98a81190dce765 Mon Sep 17 00:00:00 2001 From: Suchi Amalapurapu Date: Tue, 30 Jun 2009 21:36:16 -0700 Subject: Fix memory leaks in system_server unlink DeathRecipients in a whole bunch of places to avoid memory leaks --- services/java/com/android/server/WifiService.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'services/java/com/android/server/WifiService.java') diff --git a/services/java/com/android/server/WifiService.java b/services/java/com/android/server/WifiService.java index 5df88b2..f5e2e3d 100644 --- a/services/java/com/android/server/WifiService.java +++ b/services/java/com/android/server/WifiService.java @@ -1875,7 +1875,9 @@ public class WifiService extends IWifiManager.Stub { private WifiLock removeLock(IBinder binder) { int index = findLockByBinder(binder); if (index >= 0) { - return mList.remove(index); + WifiLock ret = mList.remove(index); + ret.unlinkDeathRecipient(); + return ret; } else { return null; } @@ -1987,6 +1989,10 @@ public class WifiService extends IWifiManager.Stub { binderDied(); } } + + void unlinkDeathRecipient() { + mBinder.unlinkToDeath(this, 0); + } } private class Multicaster extends DeathRecipient { @@ -2054,7 +2060,10 @@ public class WifiService extends IWifiManager.Stub { private void removeMulticasterLocked(int i, int uid) { - mMulticasters.remove(i); + Multicaster removed = mMulticasters.remove(i); + if (removed != null) { + removed.unlinkDeathRecipient(); + } if (mMulticasters.size() == 0) { WifiNative.startPacketFiltering(); } -- cgit v1.1