Merge "Revert "/bin/wifi:  Lock /bin/wifi to prevent simultaneous calls.""
diff --git a/wifi/utils.py b/wifi/utils.py
index 3d53428..e665654 100644
--- a/wifi/utils.py
+++ b/wifi/utils.py
@@ -5,7 +5,6 @@
 from __future__ import print_function
 
 import collections
-import fcntl
 import os
 import re
 import subprocess
@@ -301,20 +300,3 @@
     raise BinWifiException('PSK is not of a valid length: %d', len(psk))
 
   return psk
-
-
-def lock(lockfile, timeout_sec):
-  for i in range(timeout_sec):
-    try:
-      fcntl.lockf(lockfile, fcntl.LOCK_EX | fcntl.LOCK_NB)
-      return
-    except IOError:
-      time.sleep(1)
-      log('Trying to obtain lock %s for %s seconds', lockfile.name, i + 1)
-
-  raise BinWifiException('Failed to obtain lock %s after %d seconds',
-                         lockfile.name, timeout_sec)
-
-
-def unlock(lockfile):
-  fcntl.lockf(lockfile, fcntl.LOCK_UN)
diff --git a/wifi/utils_test.py b/wifi/utils_test.py
index deb737b..be91859 100755
--- a/wifi/utils_test.py
+++ b/wifi/utils_test.py
@@ -3,11 +3,7 @@
 """Tests for utils.py."""
 
 import collections
-import multiprocessing
 import os
-import shutil
-import tempfile
-import time
 
 import utils
 from wvtest import wvtest
@@ -127,67 +123,5 @@
   wvtest.WVPASSEQ('g' * 63, utils.validate_and_sanitize_psk('g' * 63))
 
 
-@wvtest.wvtest
-def lock_and_unlock_test():
-  """Test utils.lock and utils.unlock."""
-  try:
-    temp_dir = tempfile.mkdtemp()
-    lockfile = open(os.path.join(temp_dir, 'test.lock'), 'w')
-
-    def lock_until_queue_nonempty(q, timeout_sec):
-      try:
-        utils.lock(lockfile, timeout_sec)
-      except utils.BinWifiException:
-        q.put('timed out')
-        return
-      q.get()
-      q.put('releasing')
-      utils.unlock(lockfile)
-
-    q1 = multiprocessing.Queue()
-    p1 = multiprocessing.Process(target=lock_until_queue_nonempty, args=(q1, 1))
-
-    q2 = multiprocessing.Queue()
-    p2 = multiprocessing.Process(target=lock_until_queue_nonempty, args=(q2, 3))
-
-    p1.start()
-    p2.start()
-
-    wvtest.WVPASS(q1.empty())
-    wvtest.WVPASS(q2.empty())
-
-    q1.put('release')
-    # Wait for p1 to take this off the queue and relase the lock.
-    time.sleep(0.5)
-    wvtest.WVFAIL(q1.empty())
-    wvtest.WVPASSEQ(q1.get(), 'releasing')
-    wvtest.WVPASS(q2.empty())
-
-    q2.put('release')
-    # Wait for p2 to take this off the queue and relase the lock.
-    time.sleep(0.5)
-    wvtest.WVPASS(q1.empty())
-    wvtest.WVFAIL(q2.empty())
-    wvtest.WVPASSEQ(q2.get(), 'releasing')
-
-    # Now test that the timeout works.
-    q3 = multiprocessing.Queue()
-    p3 = multiprocessing.Process(target=lock_until_queue_nonempty, args=(q3, 1))
-
-    q4 = multiprocessing.Queue()
-    p4 = multiprocessing.Process(target=lock_until_queue_nonempty, args=(q4, 1))
-
-    p3.start()
-    p4.start()
-    wvtest.WVPASSEQ(q4.get(), 'timed out')
-
-    q3.put('release')
-
-  finally:
-    for p in [p1, p2, p3, p4]:
-      p.join()
-    shutil.rmtree(temp_dir)
-
-
 if __name__ == '__main__':
   wvtest.wvtest_main()
diff --git a/wifi/wifi.py b/wifi/wifi.py
index 1071031..c4fde30 100755
--- a/wifi/wifi.py
+++ b/wifi/wifi.py
@@ -49,11 +49,9 @@
 Y,yottasecond-timeouts            Don't rotate any keys: PTK, GTK, or GMK
 P,persist                         For set commands, persist options so we can restore them with 'wifi restore'.  For stop commands, remove persisted options.
 S,interface-suffix=               Interface suffix []
-lock-timeout=                     How long, in seconds, to wait for another /bin/wifi process to finish before giving up. [60]
 """
 
 _FINGERPRINTS_DIRECTORY = '/tmp/wifi/fingerprints'
-_LOCKFILE = '/tmp/wifi/wifi.lock'
 
 
 # pylint: disable=protected-access
@@ -992,37 +990,31 @@
     opt.band = '2.4'
 
   try:
-    lockfile = open(_LOCKFILE, 'w')
-    try:
-      utils.lock(lockfile, int(opt.lock_timeout))
-      function = {
-          'set': set_wifi,
-          'stop': stop_wifi,
-          'off': stop_wifi,
-          'restore': restore_wifi,
-          'show': show_wifi,
-          'setclient': set_client_wifi,
-          'stopclient': stop_client_wifi,
-          'stopap': stop_ap_wifi,
-          'scan': scan_wifi,
-      }[extra[0]]
-    except KeyError:
-      parser.fatal('Unrecognized command %s' % extra[0])
+    function = {
+        'set': set_wifi,
+        'stop': stop_wifi,
+        'off': stop_wifi,
+        'restore': restore_wifi,
+        'show': show_wifi,
+        'setclient': set_client_wifi,
+        'stopclient': stop_client_wifi,
+        'stopap': stop_ap_wifi,
+        'scan': scan_wifi,
+    }[extra[0]]
+  except KeyError:
+    parser.fatal('Unrecognized command %s' % extra[0])
+  success = function(opt)
 
-    success = function(opt)
-
-    if success:
-      if extra[0] in ('set', 'setclient'):
-        program = 'hostapd' if extra[0] == 'set' else 'wpa_supplicant'
-        if opt.persist:
-          phy = iw.find_phy(opt.band, opt.channel)
-          for band in iw.phy_bands(phy):
-            if band != opt.band:
-              persist.delete_options(program, band)
-          persist.save_options(program, opt.band, argv)
-        persist.save_options(program, opt.band, argv, tmp=True)
-  finally:
-    utils.unlock(lockfile)
+  if success:
+    if extra[0] in ('set', 'setclient'):
+      program = 'hostapd' if extra[0] == 'set' else 'wpa_supplicant'
+      if opt.persist:
+        phy = iw.find_phy(opt.band, opt.channel)
+        for band in iw.phy_bands(phy):
+          if band != opt.band:
+            persist.delete_options(program, band)
+        persist.save_options(program, opt.band, argv)
+      persist.save_options(program, opt.band, argv, tmp=True)
 
   return success