diff options
| author | 2019-04-22 18:14:45 +0900 | |
|---|---|---|
| committer | 2019-05-14 15:53:18 +0900 | |
| commit | d40b5cecfefc7193732f17ca915ad2d48b4fc30b (patch) | |
| tree | 8a5ab6e93d099215ffce54888c91c94aabe15f29 | |
| parent | cacfab67281eaffdf108adc84acb72416aef0244 (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.java | 1 |
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; |