diff --git a/src/backend/storage/lmgr/s_lock.c b/src/backend/storage/lmgr/s_lock.c
index ed1f56aa8b63c35a14c348b71db65ade306ef0dd..940b6865d24914e5b51659a786229eb8f6035af0 100644
--- a/src/backend/storage/lmgr/s_lock.c
+++ b/src/backend/storage/lmgr/s_lock.c
@@ -81,17 +81,12 @@ s_lock(volatile slock_t *lock, const char *file, int line)
 	 * so minutes.	It seems better to fix the total number of tries (and thus
 	 * the probability of unintended failure) than to fix the total time
 	 * spent.
-	 *
-	 * The pg_usleep() delays are measured in milliseconds because 1 msec is a
-	 * common resolution limit at the OS level for newer platforms. On older
-	 * platforms the resolution limit is usually 10 msec, in which case the
-	 * total delay before timeout will be a bit more.
 	 */
 #define MIN_SPINS_PER_DELAY 10
 #define MAX_SPINS_PER_DELAY 1000
 #define NUM_DELAYS			1000
-#define MIN_DELAY_MSEC		1
-#define MAX_DELAY_MSEC		1000
+#define MIN_DELAY_USEC		1000L
+#define MAX_DELAY_USEC		1000000L
 
 	int			spins = 0;
 	int			delays = 0;
@@ -109,9 +104,9 @@ s_lock(volatile slock_t *lock, const char *file, int line)
 				s_lock_stuck(lock, file, line);
 
 			if (cur_delay == 0) /* first time to delay? */
-				cur_delay = MIN_DELAY_MSEC;
+				cur_delay = MIN_DELAY_USEC;
 
-			pg_usleep(cur_delay * 1000L);
+			pg_usleep(cur_delay);
 
 #if defined(S_LOCK_TEST)
 			fprintf(stdout, "*");
@@ -122,8 +117,8 @@ s_lock(volatile slock_t *lock, const char *file, int line)
 			cur_delay += (int) (cur_delay *
 					  ((double) random() / (double) MAX_RANDOM_VALUE) + 0.5);
 			/* wrap back to minimum delay when max is exceeded */
-			if (cur_delay > MAX_DELAY_MSEC)
-				cur_delay = MIN_DELAY_MSEC;
+			if (cur_delay > MAX_DELAY_USEC)
+				cur_delay = MIN_DELAY_USEC;
 
 			spins = 0;
 		}