From e4e8e4d4f2a8ccd552670df592bed67481133344 Mon Sep 17 00:00:00 2001 From: Yong Zhang Date: Fri, 4 Sep 2009 16:41:36 -0500 Subject: [PATCH] Resolve race conditions with disconnect of CDMA data and airplane mode Specifically, wait for data to be deactivated when setPowerStateToDesired() is called during data activation. Bug: 2101430 Change-Id: Ia97dd799f779c3f88f66bc1235e7a65958e1e04f --- .../internal/telephony/cdma/CdmaServiceStateTracker.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java index 9ac78eb1ba0b8..a410f0e0e7795 100644 --- a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java +++ b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java @@ -538,12 +538,15 @@ final class CdmaServiceStateTracker extends ServiceStateTracker { if (!mPendingRadioPowerOffAfterDataOff) { DataConnectionTracker.State currentState = dcTracker.getState(); if (currentState != DataConnectionTracker.State.CONNECTED - && currentState != DataConnectionTracker.State.DISCONNECTING) { + && currentState != DataConnectionTracker.State.DISCONNECTING + && currentState != DataConnectionTracker.State.INITING) { if (DBG) log("Data disconnected, turn off radio right away."); cm.setRadioPower(false, null); } - else if (sendEmptyMessageDelayed(EVENT_SET_RADIO_POWER_OFF, 5000)) { - if (DBG) log("Wait 5 sec for data to be disconnected, then turn off radio."); + else if (sendEmptyMessageDelayed(EVENT_SET_RADIO_POWER_OFF, 30000)) { + if (DBG) { + log("Wait up to 30 sec for data to disconnect, then turn off radio."); + } mPendingRadioPowerOffAfterDataOff = true; } else { Log.w(LOG_TAG, "Cannot send delayed Msg, turn off radio right away.");