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

Commit ec05e7f2 authored by Jack Yu's avatar Jack Yu
Browse files

Fixed dangling network agent not cleaned up

When a network agent becomes dangling due to
IWLAN handover failed, telephony failed to clean
it up because the state did not transist from
CONNECTED to DISCONNECTED. In this case we need
to explicitly call unregister.

Fix: 156443459
Test: Telephony sanity tests
Change-Id: I6fcf1895964f66ef1095f62475fb856b10ce4948
parent 3b2e21f7
Loading
Loading
Loading
Loading
+3 −5
Original line number Original line Diff line number Diff line
@@ -1859,10 +1859,8 @@ public class DataConnection extends StateMachine {
                            DataConnection.this, mTransportType);
                            DataConnection.this, mTransportType);
                    NetworkInfo networkInfo = mHandoverSourceNetworkAgent.getNetworkInfo();
                    NetworkInfo networkInfo = mHandoverSourceNetworkAgent.getNetworkInfo();
                    if (networkInfo != null) {
                    if (networkInfo != null) {
                        networkInfo.setDetailedState(NetworkInfo.DetailedState.DISCONNECTED,
                        log("Cleared dangling network agent. " + mHandoverSourceNetworkAgent);
                                "dangling clean up", networkInfo.getExtraInfo());
                        mHandoverSourceNetworkAgent.unregister(DataConnection.this);
                        mHandoverSourceNetworkAgent.sendNetworkInfo(networkInfo,
                                DataConnection.this);
                    } else {
                    } else {
                        String str = "Failed to get network info.";
                        String str = "Failed to get network info.";
                        loge(str);
                        loge(str);
+17 −6
Original line number Original line Diff line number Diff line
@@ -269,6 +269,22 @@ public class DcNetworkAgent extends NetworkAgent {
        sendNetworkScore(score);
        sendNetworkScore(score);
    }
    }


    /**
     * Unregister the network agent from connectivity service.
     *
     * @param dc The data connection that invokes this method.
     */
    public synchronized void unregister(DataConnection dc) {
        if (!isOwned(dc, "unregister")) return;

        if (dc.getLinkProperties() != null
                && !TextUtils.isEmpty(dc.getLinkProperties().getInterfaceName())) {
            sInterfaceNames.remove(dc.getLinkProperties().getInterfaceName());
        }
        logd("Unregister from connectivity service");
        super.unregister();
    }

    /**
    /**
     * Set the network info.
     * Set the network info.
     *
     *
@@ -288,12 +304,7 @@ public class DcNetworkAgent extends NetworkAgent {
        }
        }
        if ((oldState == NetworkInfo.State.SUSPENDED || oldState == NetworkInfo.State.CONNECTED)
        if ((oldState == NetworkInfo.State.SUSPENDED || oldState == NetworkInfo.State.CONNECTED)
                && state == NetworkInfo.State.DISCONNECTED) {
                && state == NetworkInfo.State.DISCONNECTED) {
            if (dc.getLinkProperties() != null
            unregister(dc);
                    && !TextUtils.isEmpty(dc.getLinkProperties().getInterfaceName())) {
                sInterfaceNames.remove(dc.getLinkProperties().getInterfaceName());
            }
            logd("Unregister from connectivity service");
            unregister();
        }
        }
        mNetworkInfo = new NetworkInfo(networkInfo);
        mNetworkInfo = new NetworkInfo(networkInfo);
    }
    }