aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/storage/lmgr/s_lock.c17
1 files changed, 6 insertions, 11 deletions
diff --git a/src/backend/storage/lmgr/s_lock.c b/src/backend/storage/lmgr/s_lock.c
index ed1f56aa8b6..940b6865d24 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;
}