diff --git includes/lock.inc includes/lock.inc
index 6dd4b93..53b065e 100644
--- includes/lock.inc
+++ includes/lock.inc
@@ -199,12 +199,18 @@ function lock_may_be_available($name) {
  *   TRUE if the lock holds, FALSE if it is available.
  */
 function lock_wait($name, $delay = 30) {
-  $delay = (int) $delay;
-  while ($delay--) {
+  // Multiply delay by ten, to allow polling to begin at 1/10th of a second.
+  $delay = (int) $delay * 10;
+  $sleep = 100000;
+  while ($delay > 0) {
     // This function should only be called by a request that failed to get a
     // lock, so we sleep first to give the parallel request a chance to finish
     // and release the lock.
-    sleep(1);
+    usleep($sleep);
+    // After each sleep, double the value of $sleep, to reduce the potential
+    // for a lock stampede.
+    $delay = $delay - $sleep;
+    $sleep = min($sleep * 2, $delay);
     if (lock_may_be_available($name)) {
       // No longer need to wait.
       return FALSE;
