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

Commit 338fa1f6 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Fixed a race condition when attaching network request" into tm-dev am: 2dd5958c

parents 0b7544c7 2dd5958c
Loading
Loading
Loading
Loading
+32 −21
Original line number Diff line number Diff line
@@ -984,25 +984,7 @@ public class DataNetwork extends StateMachine {
                    break;
                }
                case EVENT_ATTACH_NETWORK_REQUEST: {
                    NetworkRequestList requestList = (NetworkRequestList) msg.obj;
                    NetworkRequestList failedList = new NetworkRequestList();
                    for (TelephonyNetworkRequest networkRequest : requestList) {
                        if (networkRequest.canBeSatisfiedBy(getNetworkCapabilities())) {
                            mAttachedNetworkRequestList.add(networkRequest);
                            networkRequest.setAttachedNetwork(DataNetwork.this);
                            networkRequest.setState(
                                    TelephonyNetworkRequest.REQUEST_STATE_SATISFIED);
                            log("Successfully attached network request " + networkRequest);
                        } else {
                            failedList.add(networkRequest);
                            log("Attached failed. Cannot satisfy the network request "
                                    + networkRequest);
                        }
                        if (failedList.size() > 0) {
                            mDataNetworkCallback.invokeFromExecutor(() -> mDataNetworkCallback
                                    .onAttachFailed(DataNetwork.this, failedList));
                        }
                    }
                    onAttachNetworkRequests((NetworkRequestList) msg.obj);
                    break;
                }
                case EVENT_DETACH_NETWORK_REQUEST: {
@@ -1486,14 +1468,14 @@ public class DataNetwork extends StateMachine {
     * Attempt to attach the network request list to this data network. Whether the network can
     * satisfy the request or not will be checked when EVENT_ATTACH_NETWORK_REQUEST is processed.
     * If the request can't be attached, {@link DataNetworkCallback#onAttachFailed(
     * DataNetwork, NetworkRequestList)} will be called, and retry should be scheduled.
     * DataNetwork, NetworkRequestList)}.
     *
     * @param requestList Network request list to attach.
     * @return {@code false} if the network is already disconnected. {@code true} means the request
     * has been scheduled to attach to the network. If attach succeeds, the network request's state
     * will be set to {@link TelephonyNetworkRequest#REQUEST_STATE_SATISFIED}. If failed, the
     * callback {@link DataNetworkCallback#onAttachFailed(DataNetwork, NetworkRequestList)} will
     * be called, and retry should be scheduled.
     * be called.
     */
    public boolean attachNetworkRequests(@NonNull NetworkRequestList requestList) {
        // If the network is already ended, we still attach the network request to the data network,
@@ -1506,6 +1488,35 @@ public class DataNetwork extends StateMachine {
        return true;
    }

    /**
     * Called when attaching network request list to this data network.
     *
     * @param requestList Network request list to attach.
     */
    public void onAttachNetworkRequests(@NonNull NetworkRequestList requestList) {
        NetworkRequestList failedList = new NetworkRequestList();
        for (TelephonyNetworkRequest networkRequest : requestList) {
            if (!mDataNetworkController.isNetworkRequestExisting(networkRequest)) {
                failedList.add(networkRequest);
                log("Attached failed. Network request was already removed.");
            } else if (!networkRequest.canBeSatisfiedBy(getNetworkCapabilities())) {
                failedList.add(networkRequest);
                log("Attached failed. Cannot satisfy the network request "
                        + networkRequest);
            } else {
                mAttachedNetworkRequestList.add(networkRequest);
                networkRequest.setAttachedNetwork(DataNetwork.this);
                networkRequest.setState(
                        TelephonyNetworkRequest.REQUEST_STATE_SATISFIED);
                log("Successfully attached network request " + networkRequest);
            }
        }
        if (failedList.size() > 0) {
            mDataNetworkCallback.invokeFromExecutor(() -> mDataNetworkCallback
                    .onAttachFailed(DataNetwork.this, failedList));
        }
    }

    /**
     * Detach the network request from this data network. Note that this will not tear down the
     * network.
+12 −1
Original line number Diff line number Diff line
@@ -1817,6 +1817,17 @@ public class DataNetworkController extends Handler {
        logv("onRemoveNetworkRequest: Removed " + networkRequest);
    }

    /**
     * Check if the network request is existing. Note this method is not thread safe so can be only
     * called within the modules in {@link com.android.internal.telephony.data}.
     *
     * @param networkRequest Telephony network request to check.
     * @return {@code true} if the network request exists.
     */
    public boolean isNetworkRequestExisting(@NonNull TelephonyNetworkRequest networkRequest) {
        return mAllNetworkRequestList.contains(networkRequest);
    }

    /**
     * Register for IMS feature registration state.
     *
@@ -2444,7 +2455,7 @@ public class DataNetworkController extends Handler {
     */
    private void onAttachNetworkRequestsFailed(@NonNull DataNetwork dataNetwork,
            @NonNull NetworkRequestList requestList) {
        // TODO: Perform retry if needed.
        log("Failed to attach " + requestList + " to " + dataNetwork);
    }

    /**