From d40b5cecfefc7193732f17ca915ad2d48b4fc30b Mon Sep 17 00:00:00 2001 From: "Kyeongkab.Nam" Date: Mon, 22 Apr 2019 18:14:45 +0900 Subject: [PATCH] Fix the reference leak on RemoteCallbackList In case that register is invoked consecutively with same callback, reference leack could be happened since unlinkToDeath for all callbacks is not being called. Test: call register multiple times with same callback and unregister callback same times. confirm the global reference table information. Change-Id: I7dbf108ea87b3ee7ce1e1a0ff75e05e8c4478f67 --- core/java/android/os/RemoteCallbackList.java | 1 + 1 file changed, 1 insertion(+) diff --git a/core/java/android/os/RemoteCallbackList.java b/core/java/android/os/RemoteCallbackList.java index b13e68df3e7cc..0c3f291395108 100644 --- a/core/java/android/os/RemoteCallbackList.java +++ b/core/java/android/os/RemoteCallbackList.java @@ -123,6 +123,7 @@ public class RemoteCallbackList { IBinder binder = callback.asBinder(); try { Callback cb = new Callback(callback, cookie); + unregister(callback); binder.linkToDeath(cb, 0); mCallbacks.put(binder, cb); return true;