Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 197fa0ac authored by Hyunyoung Song's avatar Hyunyoung Song
Browse files

Fix SearchUiService memory leak by removing DeathRecipient from

CallbackWrapper

Bug: 232548271
Test: used  go/ahat to see memory stay steady
Change-Id: I182b6dc3ce4d86ab46c5543a1ff68f320fecaa98
parent ac94a2da
Loading
Loading
Loading
Loading
+3 −22
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import static com.android.internal.util.function.pooled.PooledLambda.obtainMessa
import android.annotation.CallSuper;
import android.annotation.MainThread;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.app.Service;
import android.app.search.ISearchCallback;
@@ -88,7 +87,7 @@ public abstract class SearchUiService extends Service {
            mHandler.sendMessage(
                    obtainMessage(SearchUiService::onQuery,
                            SearchUiService.this, sessionId, input,
                            new CallbackWrapper(callback, null)));
                            new CallbackWrapper(callback)));
        }

        @Override
@@ -173,21 +172,12 @@ public abstract class SearchUiService extends Service {
    @MainThread
    public abstract void onDestroy(@NonNull SearchSessionId sessionId);

    private static final class CallbackWrapper implements Consumer<List<SearchTarget>>,
            IBinder.DeathRecipient {
    private static final class CallbackWrapper implements Consumer<List<SearchTarget>> {

        private ISearchCallback mCallback;
        private final Consumer<CallbackWrapper> mOnBinderDied;

        CallbackWrapper(ISearchCallback callback,
                @Nullable Consumer<CallbackWrapper> onBinderDied) {
        CallbackWrapper(ISearchCallback callback) {
            mCallback = callback;
            mOnBinderDied = onBinderDied;
            try {
                mCallback.asBinder().linkToDeath(this, 0);
            } catch (RemoteException e) {
                Slog.e(TAG, "Failed to link to death: " + e);
            }
        }

        @Override
@@ -203,14 +193,5 @@ public abstract class SearchUiService extends Service {
                Slog.e(TAG, "Error sending result:" + e);
            }
        }

        @Override
        public void binderDied() {
            mCallback.asBinder().unlinkToDeath(this, 0);
            mCallback = null;
            if (mOnBinderDied != null) {
                mOnBinderDied.accept(this);
            }
        }
    }
}