summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Kyeongkab.Nam <Kyeongkab.Nam@sony.com> 2019-04-22 18:14:45 +0900
committer Kyeongkab.Nam <Kyeongkab.Nam@sony.com> 2019-05-14 15:53:18 +0900
commitd40b5cecfefc7193732f17ca915ad2d48b4fc30b (patch)
tree8a5ab6e93d099215ffce54888c91c94aabe15f29
parentcacfab67281eaffdf108adc84acb72416aef0244 (diff)
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
-rw-r--r--core/java/android/os/RemoteCallbackList.java1
1 files changed, 1 insertions, 0 deletions
diff --git a/core/java/android/os/RemoteCallbackList.java b/core/java/android/os/RemoteCallbackList.java
index b13e68df3e7c..0c3f29139510 100644
--- a/core/java/android/os/RemoteCallbackList.java
+++ b/core/java/android/os/RemoteCallbackList.java
@@ -123,6 +123,7 @@ public class RemoteCallbackList<E extends IInterface> {
IBinder binder = callback.asBinder();
try {
Callback cb = new Callback(callback, cookie);
+ unregister(callback);
binder.linkToDeath(cb, 0);
mCallbacks.put(binder, cb);
return true;