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

Commit 6af8861d authored by Chalard Jean's avatar Chalard Jean
Browse files

Fix broken testCaptivePortalApp

This was broken by aosp/1657763, only on eng builds because
of a wtf. The root cause of the issue is that the test is
acquiring MAINLINE_NETWORK_STACK after it registers a callback
but before in unregisters it. After aosp/1657763, the objects
keeping track of callbacks are separate for processes with and
without MAINLINE_NETWORK_STACK, which means the removal is
looked up in a different counter.

Solve this by having the NRI remember the relevant counter
keeping track of it.

Bug: none
Test: testCaptivePortalApp
Change-Id: I566a28522fa68be9cc2bdb4624b588b4f01d3b7e
parent 36a84ebb
Loading
Loading
Loading
Loading
+16 −14
Original line number Diff line number Diff line
@@ -4034,7 +4034,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
                }
            }
        }
        decrementRequestCount(nri);
        nri.decrementRequestCount();
        mNetworkRequestInfoLogs.log("RELEASE " + nri);

        if (null != nri.getActiveRequest()) {
@@ -4151,14 +4151,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
                ? mSystemNetworkRequestCounter : mNetworkRequestCounter;
    }

    private void incrementRequestCountOrThrow(NetworkRequestInfo nri) {
        getRequestCounter(nri).incrementCountOrThrow(nri.mUid);
    }

    private void decrementRequestCount(NetworkRequestInfo nri) {
        getRequestCounter(nri).decrementCount(nri.mUid);
    }

    @Override
    public void setAcceptUnvalidated(Network network, boolean accept, boolean always) {
        enforceNetworkStackSettingsOrSetup();
@@ -5457,6 +5449,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
        @Nullable
        final String mCallingAttributionTag;

        // Counter keeping track of this NRI.
        final PerUidCounter mPerUidCounter;

        // Effective UID of this request. This is different from mUid when a privileged process
        // files a request on behalf of another UID. This UID is used to determine blocked status,
        // UID matching, and so on. mUid above is used for permission checks and to enforce the
@@ -5507,7 +5502,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
            mPid = getCallingPid();
            mUid = mDeps.getCallingUid();
            mAsUid = asUid;
            incrementRequestCountOrThrow(this);
            mPerUidCounter = getRequestCounter(this);
            mPerUidCounter.incrementCountOrThrow(mUid);
            /**
             * Location sensitive data not included in pending intent. Only included in
             * {@link NetworkCallback}.
@@ -5539,7 +5535,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
            mUid = mDeps.getCallingUid();
            mAsUid = asUid;
            mPendingIntent = null;
            incrementRequestCountOrThrow(this);
            mPerUidCounter = getRequestCounter(this);
            mPerUidCounter.incrementCountOrThrow(mUid);
            mCallbackFlags = callbackFlags;
            mCallingAttributionTag = callingAttributionTag;
            linkDeathRecipient();
@@ -5577,7 +5574,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
            mUid = nri.mUid;
            mAsUid = nri.mAsUid;
            mPendingIntent = nri.mPendingIntent;
            incrementRequestCountOrThrow(this);
            mPerUidCounter = getRequestCounter(this);
            mPerUidCounter.incrementCountOrThrow(mUid);
            mCallbackFlags = nri.mCallbackFlags;
            mCallingAttributionTag = nri.mCallingAttributionTag;
            linkDeathRecipient();
@@ -5609,6 +5607,10 @@ public class ConnectivityService extends IConnectivityManager.Stub
            return Collections.unmodifiableList(tempRequests);
        }

        void decrementRequestCount() {
            mPerUidCounter.decrementCount(mUid);
        }

        void linkDeathRecipient() {
            if (null != mBinder) {
                try {
@@ -8773,7 +8775,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
            // Decrement the reference count for this NetworkRequestInfo. The reference count is
            // incremented when the NetworkRequestInfo is created as part of
            // enforceRequestCountLimit().
            decrementRequestCount(nri);
            nri.decrementRequestCount();
            return;
        }

@@ -8839,7 +8841,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
        // Decrement the reference count for this NetworkRequestInfo. The reference count is
        // incremented when the NetworkRequestInfo is created as part of
        // enforceRequestCountLimit().
        decrementRequestCount(nri);
        nri.decrementRequestCount();

        iCb.unlinkToDeath(cbInfo, 0);
    }