Loading services/java/com/android/server/WifiService.java +5 −25 Original line number Diff line number Diff line Loading @@ -232,18 +232,6 @@ public class WifiService extends IWifiManager.Stub { PowerManager powerManager = (PowerManager)mContext.getSystemService(Context.POWER_SERVICE); sWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, WAKELOCK_TAG); sDriverStopWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, WAKELOCK_TAG); mWifiStateTracker.setReleaseWakeLockCallback( new Runnable() { public void run() { mWifiHandler.removeMessages(MESSAGE_RELEASE_WAKELOCK); synchronized (sDriverStopWakeLock) { if (sDriverStopWakeLock.isHeld()) { sDriverStopWakeLock.release(); } } } } ); mContext.registerReceiver( new BroadcastReceiver() { Loading Loading @@ -1779,20 +1767,16 @@ public class WifiService extends IWifiManager.Stub { sendEnableMessage(true, false, mLastEnableUid); sWakeLock.acquire(); sendStartMessage(strongestLockMode == WifiManager.WIFI_MODE_SCAN_ONLY); } else { } else if (!mWifiStateTracker.isDriverStopped()) { int wakeLockTimeout = Settings.Secure.getInt( mContext.getContentResolver(), Settings.Secure.WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS, DEFAULT_WAKELOCK_TIMEOUT); /* * The following wakelock is held in order to ensure * that the connectivity manager has time to fail over * to the mobile data network. The connectivity manager * releases it once mobile data connectivity has been * established. If connectivity cannot be established, * the wakelock is released after wakeLockTimeout * milliseconds have elapsed. * We are assuming that ConnectivityService can make * a transition to cellular data within wakeLockTimeout time. * The wakelock is released by the delayed message. */ sDriverStopWakeLock.acquire(); mWifiHandler.sendEmptyMessage(MESSAGE_STOP_WIFI); Loading Loading @@ -1886,11 +1870,7 @@ public class WifiService extends IWifiManager.Stub { break; case MESSAGE_RELEASE_WAKELOCK: synchronized (sDriverStopWakeLock) { if (sDriverStopWakeLock.isHeld()) { sDriverStopWakeLock.release(); } } break; case MESSAGE_START_ACCESS_POINT: Loading wifi/java/android/net/wifi/WifiStateTracker.java +21 −24 Original line number Diff line number Diff line Loading @@ -313,8 +313,6 @@ public class WifiStateTracker extends NetworkStateTracker { private String mInterfaceName; private static String LS = System.getProperty("line.separator"); private Runnable mReleaseWakeLockCallback; private static String[] sDnsPropNames; /** Loading Loading @@ -615,7 +613,15 @@ public class WifiStateTracker extends NetworkStateTracker { } } private synchronized boolean isDriverStopped() { /** * TODO: mRunState is not synchronized in some places * address this as part of re-architect. * * TODO: We are exposing an additional public synchronized call * for a wakelock optimization in WifiService. Remove it * when we handle the wakelock in ConnectivityService. */ public synchronized boolean isDriverStopped() { return mRunState == RUN_STATE_STOPPED || mRunState == RUN_STATE_STOPPING; } Loading Loading @@ -674,15 +680,20 @@ public class WifiStateTracker extends NetworkStateTracker { } } /** * We release the wakelock in WifiService * using a timer. * * TODO: * Releasing wakelock using both timer and * a call from ConnectivityService requires * a rethink. We had problems where WifiService * could keep a wakelock forever if we delete * messages in the asynchronous call * from ConnectivityService */ @Override public void releaseWakeLock() { if (mReleaseWakeLockCallback != null) { mReleaseWakeLockCallback.run(); } } public void setReleaseWakeLockCallback(Runnable callback) { mReleaseWakeLockCallback = callback; } /** Loading Loading @@ -1481,20 +1492,6 @@ public class WifiStateTracker extends NetworkStateTracker { } else { return disconnect(); } } else { /* * The "driver-stop" wake lock normally is released from the * connectivity manager after the mobile data connection has * been established, or after a timeout period, if that never * happens. Because WifiService.updateWifiState() can get called * multiple times, we can end up acquiring the wake lock and calling * disconnectAndStop() even when a disconnect or stop operation * is already in progress. In that case, we want to ignore the * disconnectAndStop request and release the (ref-counted) wake * lock, so that eventually, when the mobile data connection is * established, the ref count will drop to zero. */ releaseWakeLock(); } return true; } Loading Loading
services/java/com/android/server/WifiService.java +5 −25 Original line number Diff line number Diff line Loading @@ -232,18 +232,6 @@ public class WifiService extends IWifiManager.Stub { PowerManager powerManager = (PowerManager)mContext.getSystemService(Context.POWER_SERVICE); sWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, WAKELOCK_TAG); sDriverStopWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, WAKELOCK_TAG); mWifiStateTracker.setReleaseWakeLockCallback( new Runnable() { public void run() { mWifiHandler.removeMessages(MESSAGE_RELEASE_WAKELOCK); synchronized (sDriverStopWakeLock) { if (sDriverStopWakeLock.isHeld()) { sDriverStopWakeLock.release(); } } } } ); mContext.registerReceiver( new BroadcastReceiver() { Loading Loading @@ -1779,20 +1767,16 @@ public class WifiService extends IWifiManager.Stub { sendEnableMessage(true, false, mLastEnableUid); sWakeLock.acquire(); sendStartMessage(strongestLockMode == WifiManager.WIFI_MODE_SCAN_ONLY); } else { } else if (!mWifiStateTracker.isDriverStopped()) { int wakeLockTimeout = Settings.Secure.getInt( mContext.getContentResolver(), Settings.Secure.WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS, DEFAULT_WAKELOCK_TIMEOUT); /* * The following wakelock is held in order to ensure * that the connectivity manager has time to fail over * to the mobile data network. The connectivity manager * releases it once mobile data connectivity has been * established. If connectivity cannot be established, * the wakelock is released after wakeLockTimeout * milliseconds have elapsed. * We are assuming that ConnectivityService can make * a transition to cellular data within wakeLockTimeout time. * The wakelock is released by the delayed message. */ sDriverStopWakeLock.acquire(); mWifiHandler.sendEmptyMessage(MESSAGE_STOP_WIFI); Loading Loading @@ -1886,11 +1870,7 @@ public class WifiService extends IWifiManager.Stub { break; case MESSAGE_RELEASE_WAKELOCK: synchronized (sDriverStopWakeLock) { if (sDriverStopWakeLock.isHeld()) { sDriverStopWakeLock.release(); } } break; case MESSAGE_START_ACCESS_POINT: Loading
wifi/java/android/net/wifi/WifiStateTracker.java +21 −24 Original line number Diff line number Diff line Loading @@ -313,8 +313,6 @@ public class WifiStateTracker extends NetworkStateTracker { private String mInterfaceName; private static String LS = System.getProperty("line.separator"); private Runnable mReleaseWakeLockCallback; private static String[] sDnsPropNames; /** Loading Loading @@ -615,7 +613,15 @@ public class WifiStateTracker extends NetworkStateTracker { } } private synchronized boolean isDriverStopped() { /** * TODO: mRunState is not synchronized in some places * address this as part of re-architect. * * TODO: We are exposing an additional public synchronized call * for a wakelock optimization in WifiService. Remove it * when we handle the wakelock in ConnectivityService. */ public synchronized boolean isDriverStopped() { return mRunState == RUN_STATE_STOPPED || mRunState == RUN_STATE_STOPPING; } Loading Loading @@ -674,15 +680,20 @@ public class WifiStateTracker extends NetworkStateTracker { } } /** * We release the wakelock in WifiService * using a timer. * * TODO: * Releasing wakelock using both timer and * a call from ConnectivityService requires * a rethink. We had problems where WifiService * could keep a wakelock forever if we delete * messages in the asynchronous call * from ConnectivityService */ @Override public void releaseWakeLock() { if (mReleaseWakeLockCallback != null) { mReleaseWakeLockCallback.run(); } } public void setReleaseWakeLockCallback(Runnable callback) { mReleaseWakeLockCallback = callback; } /** Loading Loading @@ -1481,20 +1492,6 @@ public class WifiStateTracker extends NetworkStateTracker { } else { return disconnect(); } } else { /* * The "driver-stop" wake lock normally is released from the * connectivity manager after the mobile data connection has * been established, or after a timeout period, if that never * happens. Because WifiService.updateWifiState() can get called * multiple times, we can end up acquiring the wake lock and calling * disconnectAndStop() even when a disconnect or stop operation * is already in progress. In that case, we want to ignore the * disconnectAndStop request and release the (ref-counted) wake * lock, so that eventually, when the mobile data connection is * established, the ref count will drop to zero. */ releaseWakeLock(); } return true; } Loading