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

Commit ec2d24f0 authored by Aishwarya Mallampati's avatar Aishwarya Mallampati
Browse files

Remove synchronized() blocks that are not required.

If variables are accessed only by methods that run on the handler
thread, then those variables need not be protected by
synchronized(mLock)

Bug: 409610450
Test: atest
Manual Test: 413470262
Flag: com.android.internal.telephony.flags.satellite_improve_multi_thread_design
Change-Id: Ifccf1d6e6a710a8e0725de95f0f26007c20bfc3a
parent 5b845588
Loading
Loading
Loading
Loading
+73 −84
Original line number Diff line number Diff line
@@ -46,7 +46,6 @@ import android.util.Log;
import android.util.Pair;

import com.android.internal.R;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.os.SomeArgs;
import com.android.internal.telephony.IIntegerConsumer;
@@ -80,8 +79,8 @@ public class DatagramReceiver extends Handler {

    /** Key used to read/write satellite datagramId in shared preferences. */
    private static final String SATELLITE_DATAGRAM_ID_KEY = "satellite_datagram_id_key";
    private static AtomicLong mNextDatagramId = new AtomicLong(0);

    /** All the variables initialized inside the constructor are declared here. */
    @NonNull private static DatagramReceiver sInstance;
    @NonNull private final Context mContext;
    @NonNull private final ContentResolver mContentResolver;
@@ -91,17 +90,23 @@ public class DatagramReceiver extends Handler {
    @NonNull private final SessionMetricsStats mSessionMetricsStats;
    @NonNull private final Looper mLooper;
    @NonNull private final FeatureFlags mFeatureFlags;
    @Nullable private PersistentLogger mPersistentLogger = null;

    /** All the atomic variables are declared here. */
    private static AtomicLong mNextDatagramId = new AtomicLong(0);
    private AtomicLong mDatagramTransferStartTime = new AtomicLong(0);
    private AtomicBoolean mIsDemoMode = new AtomicBoolean(false);
    private AtomicBoolean mIsAligned = new AtomicBoolean(false);

    /**
     * All the variables declared here should only be accessed by methods that run inside the
     * handler thread.
     */
    @Nullable
    private DatagramReceiverHandlerRequest mDemoPollPendingSatelliteDatagramsRequest = null;
    @Nullable
    private DatagramReceiverHandlerRequest mPendingPollSatelliteDatagramsRequest = null;
    private final Object mLock = new Object();
    @Nullable
    private PersistentLogger mPersistentLogger = null;


    /**
     * Map key: subId, value: SatelliteDatagramListenerHandler to notify registrants.
@@ -636,7 +641,6 @@ public class DatagramReceiver extends Handler {
    }

    private void handleSatelliteConnectedEvent() {
        synchronized (mLock) {
        if (isDatagramWaitForConnectedStateTimerStarted()) {
            stopDatagramWaitForConnectedStateTimer();
            if (mPendingPollSatelliteDatagramsRequest == null) {
@@ -652,7 +656,6 @@ public class DatagramReceiver extends Handler {
            mPendingPollSatelliteDatagramsRequest = null;
        }
    }
    }

    private void pollPendingSatelliteDatagramsInternal(int subId,
            @NonNull Consumer<Integer> callback) {
@@ -667,7 +670,6 @@ public class DatagramReceiver extends Handler {
        if (mDatagramController.needsWaitingForSatelliteConnected(
                SatelliteManager.DATAGRAM_TYPE_UNKNOWN)) {
            plogd("pollPendingSatelliteDatagramsInternal: wait for satellite connected");
            synchronized (mLock) {
            mPendingPollSatelliteDatagramsRequest = new DatagramReceiverHandlerRequest(
                    callback, SatelliteServiceUtils.getPhone(), subId);
            mDatagramController.updateReceiveStatus(subId,
@@ -676,7 +678,6 @@ public class DatagramReceiver extends Handler {
                    mDatagramController.getReceivePendingCount(),
                    SatelliteManager.SATELLITE_RESULT_SUCCESS);
            startDatagramWaitForConnectedStateTimer();
            }
            return;
        }

@@ -691,7 +692,6 @@ public class DatagramReceiver extends Handler {
        if (mIsDemoMode.get()) {
            DatagramReceiverHandlerRequest request = new DatagramReceiverHandlerRequest(
                    callback, phone, subId);
            synchronized (mLock) {
            if (!mDatagramController.waitForAligningToSatellite(mIsAligned.get())) {
                Message msg = obtainMessage(EVENT_POLL_PENDING_SATELLITE_DATAGRAMS_DONE,
                        request);
@@ -700,7 +700,6 @@ public class DatagramReceiver extends Handler {
            } else {
                startSatelliteAlignedTimer(request);
            }
            }
        } else {
            sendRequestAsync(CMD_POLL_PENDING_SATELLITE_DATAGRAMS, callback, phone, subId);
        }
@@ -726,7 +725,6 @@ public class DatagramReceiver extends Handler {
    private void handleEventSatelliteModemStateChanged(
            @SatelliteManager.SatelliteModemState int state) {
        plogd("handleEventSatelliteModemStateChanged: state = " + state);
        synchronized (mLock) {
        if (state == SatelliteManager.SATELLITE_MODEM_STATE_OFF
                || state == SatelliteManager.SATELLITE_MODEM_STATE_UNAVAILABLE) {
            plogd("onSatelliteModemStateChanged: cleaning up resources");
@@ -735,9 +733,7 @@ public class DatagramReceiver extends Handler {
            handleSatelliteConnectedEvent();
        }
    }
    }

    @GuardedBy("mLock")
    private void cleanupDemoModeResources() {
        if (isSatelliteAlignedTimerStarted()) {
            stopSatelliteAlignedTimer();
@@ -755,9 +751,7 @@ public class DatagramReceiver extends Handler {
        mIsAligned.set(false);
    }

    @GuardedBy("mLock")
    private void cleanUpResources() {
        synchronized (mLock) {
        if (mPendingPollSatelliteDatagramsRequest != null) {
            Consumer<Integer> callback =
                    (Consumer<Integer>) mPendingPollSatelliteDatagramsRequest.argument;
@@ -765,7 +759,6 @@ public class DatagramReceiver extends Handler {
            mPendingPollSatelliteDatagramsRequest = null;
        }
        stopDatagramWaitForConnectedStateTimer();
        }

        int subId = SatelliteController.getInstance().getSelectedSatelliteSubId();
        if (mDatagramController.isReceivingDatagrams()) {
@@ -855,12 +848,10 @@ public class DatagramReceiver extends Handler {
    }

    private void handleRequestSetDeviceAlignedWithSatellite(boolean isAligned) {
        synchronized (mLock) {
        mIsAligned.set(isAligned);
        plogd("setDeviceAlignedWithSatellite: " + isAligned);
        if (isAligned && mIsDemoMode.get()) handleEventSatelliteAligned();
    }
    }

    private void startSatelliteAlignedTimer(DatagramReceiverHandlerRequest request) {
        if (isSatelliteAlignedTimerStarted()) {
@@ -933,7 +924,6 @@ public class DatagramReceiver extends Handler {
    }

    private void handleEventDatagramWaitForConnectedStateTimedOut() {
        synchronized (mLock) {
        if (mPendingPollSatelliteDatagramsRequest == null) {
            plogw("handleEventDatagramWaitForConnectedStateTimedOut: "
                    + "mPendingPollSatelliteDatagramsRequest is null");
@@ -960,7 +950,6 @@ public class DatagramReceiver extends Handler {
        callback.accept(SatelliteManager.SATELLITE_RESULT_NOT_REACHABLE);
        mPendingPollSatelliteDatagramsRequest = null;
    }
    }

    /**
     * Destroys this DatagramDispatcher. Used for tearing down static resources during testing.