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

Commit a2adc346 authored by Rambo Wang's avatar Rambo Wang
Browse files

Always call unbindService no matter what bindService returns

According to Android API reference, unbindService should be called
as long as bindService was called (no matter succeed or not).

CarrierServiceBindHelper only call unbindService when bindService
succeed, this may leaks the ServiceConnection.

mServiceBound, which is used to mark if the bindService succeed, is
removed. We don't need it to conditionally call unbindService now.

Bug: 201423849
Test: CarrierServiceBindHelperTest
Change-Id: Icfb3de7154bf6f3324ce39d71a0b8cb484b52605
parent ac620cd0
Loading
Loading
Loading
Loading
+5 −12
Original line number Diff line number Diff line
@@ -71,9 +71,6 @@ public class CarrierServiceBindHelper {
    private final PackageChangeReceiver mPackageMonitor = new CarrierServicePackageMonitor();
    private final LocalLog mLocalLog = new LocalLog(100);

    // whether we have successfully bound to the service
    private boolean mServiceBound = false;

    private BroadcastReceiver mUserUnlockedReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
@@ -291,7 +288,6 @@ public class CarrierServiceBindHelper {
                        (r) -> mHandler.post(r),
                        connection)) {
                    logdWithLocalLog("service bound");
                    mServiceBound = true;
                    return;
                }

@@ -346,17 +342,14 @@ public class CarrierServiceBindHelper {
            carrierPackage = null;
            carrierServiceClass = null;

            // Actually unbind
            if (mServiceBound) {
                logdWithLocalLog("Unbinding from carrier app");
                mServiceBound = false;
            // Always call unbindService, no matter if bindService succeed.
            if (connection != null) {
                mContext.unbindService(connection);
            } else {
                logdWithLocalLog("Not bound, skipping unbindService call");
            }
                logdWithLocalLog("Unbinding from carrier app");
                connection = null;
                mUnbindScheduledUptimeMillis = -1;
            }
        }

        private void cancelScheduledUnbind() {
            logdWithLocalLog("cancelScheduledUnbind");