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

Commit cd4fefc5 authored by Etan Cohen's avatar Etan Cohen Committed by android-build-merger
Browse files

Merge "[P2P] Eliminate separate storage of binders - a memory leak" into oc-dr1-dev

am: 0dd8a3cd

Change-Id: I56340c7f580266a4cbb1d1956d063f33cd414e40
parents 17054789 0dd8a3cd
Loading
Loading
Loading
Loading
+13 −9
Original line number Diff line number Diff line
@@ -291,7 +291,6 @@ public class WifiP2pManager {
            "android.net.wifi.p2p.CALLING_PACKAGE";

    IWifiP2pManager mService;
    private final Map<Channel, Binder> mBinders = new HashMap<>();

    private static final int BASE = Protocol.BASE_WIFI_P2P_MANAGER;

@@ -670,11 +669,12 @@ public class WifiP2pManager {
     * by doing a call on {@link #initialize}
     */
    public static class Channel {
        Channel(Context context, Looper looper, ChannelListener l) {
        Channel(Context context, Looper looper, ChannelListener l, Binder binder) {
            mAsyncChannel = new AsyncChannel();
            mHandler = new P2pHandler(looper);
            mChannelListener = l;
            mContext = context;
            mBinder = binder;
        }
        private final static int INVALID_LISTENER_KEY = 0;
        private ChannelListener mChannelListener;
@@ -686,6 +686,8 @@ public class WifiP2pManager {
        private final Object mListenerMapLock = new Object();
        private int mListenerKey = 0;

        /* package */ final Binder mBinder;

        private AsyncChannel mAsyncChannel;
        private P2pHandler mHandler;
        Context mContext;
@@ -892,8 +894,8 @@ public class WifiP2pManager {
     */
    public Channel initialize(Context srcContext, Looper srcLooper, ChannelListener listener) {
        Binder binder = new Binder();
        Channel channel = initalizeChannel(srcContext, srcLooper, listener, getMessenger(binder));
        mBinders.put(channel, binder);
        Channel channel = initalizeChannel(srcContext, srcLooper, listener, getMessenger(binder),
                binder);
        return channel;
    }

@@ -903,14 +905,15 @@ public class WifiP2pManager {
     */
    public Channel initializeInternal(Context srcContext, Looper srcLooper,
                                      ChannelListener listener) {
        return initalizeChannel(srcContext, srcLooper, listener, getP2pStateMachineMessenger());
        return initalizeChannel(srcContext, srcLooper, listener, getP2pStateMachineMessenger(),
                null);
    }

    private Channel initalizeChannel(Context srcContext, Looper srcLooper, ChannelListener listener,
                                     Messenger messenger) {
                                     Messenger messenger, Binder binder) {
        if (messenger == null) return null;

        Channel c = new Channel(srcContext, srcLooper, listener);
        Channel c = new Channel(srcContext, srcLooper, listener, binder);
        if (c.mAsyncChannel.connectSync(srcContext, c.mHandler, messenger)
                == AsyncChannel.STATUS_SUCCESSFUL) {
            return c;
@@ -1428,8 +1431,9 @@ public class WifiP2pManager {
     */
    public void close(Channel c) {
        try {
            mService.close(mBinders.get(c));
            mBinders.remove(c);
            if (c != null) {
                mService.close(c.mBinder);
            }
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }