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

Commit 413fea0a authored by Jack Yu's avatar Jack Yu
Browse files

Fixed race condition while powering down

Made sure powerOffRadioSafely is also run in the main thread
so that it can access DataNetworkController without synchronization.

Fix: 378616116
Test: atest FrameworksTelephonyTests
Test: Manuall power down the device on Pixel 7
Flag: com.android.internal.telephony.flags.power_down_race_fix
Change-Id: Ic645fb9cb324a31274e9dce4a6797694ce996cc8
parent 9ffde753
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -220,3 +220,13 @@ flag {
    }
}

# OWNER=jackyu TARGET=25Q2
flag {
    name: "power_down_race_fix"
    namespace: "telephony"
    description: "Fixed race condition while powering down"
    bug:"378616116"
    metadata {
        purpose: PURPOSE_BUGFIX
    }
}
+9 −2
Original line number Diff line number Diff line
@@ -1893,9 +1893,16 @@ public class GsmCdmaPhone extends Phone {
    @Override
    public void setRadioPowerForReason(boolean power, boolean forEmergencyCall,
            boolean isSelectedPhoneForEmergencyCall, boolean forceApply, int reason) {
        if (mFeatureFlags.powerDownRaceFix()) {
            // setRadioPowerForReason can be called by the binder thread. We need to move that into
            // the main thread to prevent race condition.
            post(() -> mSST.setRadioPowerForReason(power, forEmergencyCall,
                    isSelectedPhoneForEmergencyCall, forceApply, reason));
        } else {
            mSST.setRadioPowerForReason(power, forEmergencyCall, isSelectedPhoneForEmergencyCall,
                    forceApply, reason);
        }
    }

    @Override
    public Set<Integer> getRadioPowerOffReasons() {