From a8a17756bbc9617ba22d0c78a73fce5bb2faa6f2 Mon Sep 17 00:00:00 2001 From: Johannes Sixt Date: Fri, 5 Jun 2015 21:45:06 +0200 Subject: lockfile: convert retry timeout computations to millisecond When the goal is to wait for some random amount of time up to one second, it is not necessary to compute with microsecond precision. This is a preparation to re-use sleep_millisec(). Signed-off-by: Johannes Sixt Reviewed-by: Michael Haggerty Signed-off-by: Junio C Hamano diff --git a/lockfile.c b/lockfile.c index 738f202..3f5b699 100644 --- a/lockfile.c +++ b/lockfile.c @@ -184,7 +184,7 @@ static int lock_file_timeout(struct lock_file *lk, const char *path, { int n = 1; int multiplier = 1; - long remaining_us = 0; + long remaining_ms = 0; static int random_initialized = 0; if (timeout_ms == 0) @@ -195,16 +195,11 @@ static int lock_file_timeout(struct lock_file *lk, const char *path, random_initialized = 1; } - if (timeout_ms > 0) { - /* avoid overflow */ - if (timeout_ms <= LONG_MAX / 1000) - remaining_us = timeout_ms * 1000; - else - remaining_us = LONG_MAX; - } + if (timeout_ms > 0) + remaining_ms = timeout_ms; while (1) { - long backoff_ms, wait_us; + long backoff_ms, wait_ms; int fd; fd = lock_file(lk, path, flags); @@ -213,14 +208,14 @@ static int lock_file_timeout(struct lock_file *lk, const char *path, return fd; /* success */ else if (errno != EEXIST) return -1; /* failure other than lock held */ - else if (timeout_ms > 0 && remaining_us <= 0) + else if (timeout_ms > 0 && remaining_ms <= 0) return -1; /* failure due to timeout */ backoff_ms = multiplier * INITIAL_BACKOFF_MS; /* back off for between 0.75*backoff_ms and 1.25*backoff_ms */ - wait_us = (750 + rand() % 500) * backoff_ms; - sleep_microseconds(wait_us); - remaining_us -= wait_us; + wait_ms = (750 + rand() % 500) * backoff_ms / 1000; + sleep_microseconds(wait_ms*1000); + remaining_ms -= wait_ms; /* Recursion: (n+1)^2 = n^2 + 2n + 1 */ multiplier += 2*n + 1; -- cgit v0.10.2-6-g49f6