OSDN Git Service

wifi: get interface name from wlan.interface
[android-x86/frameworks-base.git] / core / java / android / net / DhcpStateMachine.java
index e2230c9..2c94650 100644 (file)
@@ -31,6 +31,7 @@ import android.net.NetworkUtils;
 import android.os.Message;
 import android.os.PowerManager;
 import android.os.SystemClock;
+import android.os.SystemProperties;
 import android.util.Log;
 
 /**
@@ -109,7 +110,7 @@ public class DhcpStateMachine extends HierarchicalStateMachine {
 
         mContext = context;
         mController = controller;
-        mInterfaceName = intf;
+        mInterfaceName = intf.isEmpty() ? SystemProperties.get("wlan.interface", "wlan0") : intf;
 
         mAlarmManager = (AlarmManager)mContext.getSystemService(Context.ALARM_SERVICE);
         Intent dhcpRenewalIntent = new Intent(ACTION_DHCP_RENEW, null);
@@ -117,13 +118,14 @@ public class DhcpStateMachine extends HierarchicalStateMachine {
 
         PowerManager powerManager = (PowerManager)mContext.getSystemService(Context.POWER_SERVICE);
         mDhcpRenewWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, WAKELOCK_TAG);
+        mDhcpRenewWakeLock.setReferenceCounted(false);
 
         mBroadcastReceiver = new BroadcastReceiver() {
             @Override
             public void onReceive(Context context, Intent intent) {
                 //DHCP renew
                 if (DBG) Log.d(TAG, "Sending a DHCP renewal " + this);
-                //acquire a 40s wakelock to finish DHCP renewal
+                //Lock released after 40s in worst case scenario
                 mDhcpRenewWakeLock.acquire(40000);
                 sendMessage(CMD_RENEW_DHCP);
             }
@@ -166,6 +168,7 @@ public class DhcpStateMachine extends HierarchicalStateMachine {
             switch (message.what) {
                 case CMD_RENEW_DHCP:
                     Log.e(TAG, "Error! Failed to handle a DHCP renewal on " + mInterfaceName);
+                    mDhcpRenewWakeLock.release();
                     break;
                 case HSM_QUIT_CMD:
                     mContext.unregisterReceiver(mBroadcastReceiver);
@@ -268,10 +271,12 @@ public class DhcpStateMachine extends HierarchicalStateMachine {
                         /* Notify controller before starting DHCP */
                         mController.sendMessage(CMD_PRE_DHCP_ACTION);
                         transitionTo(mWaitBeforeRenewalState);
+                        //mDhcpRenewWakeLock is released in WaitBeforeRenewalState
                     } else {
                         if (!runDhcp(DhcpAction.RENEW)) {
                             transitionTo(mStoppedState);
                         }
+                        mDhcpRenewWakeLock.release();
                     }
                     break;
                 case CMD_START_DHCP:
@@ -318,6 +323,10 @@ public class DhcpStateMachine extends HierarchicalStateMachine {
             }
             return retValue;
         }
+        @Override
+        public void exit() {
+            mDhcpRenewWakeLock.release();
+        }
     }
 
     private boolean runDhcp(DhcpAction dhcpAction) {