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 <j6t@kdbg.org> Reviewed-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Johannes Sixt committed Jun 5, 2015 at 21:45 UTC a8a17756bbc9617ba22d0c78a73fce5bb2faa6f2
1 file changed +8 -13
lockfile.c
+8 -13
@@ -184,7 +184,7 @@ static int lock_file_timeout(struct lock_file *lk, const char *path,
184 {
185 int n = 1;
186 int multiplier = 1;
187 - long remaining_us = 0;
187 + long remaining_ms = 0;
188 static int random_initialized = 0;
189
190 if (timeout_ms == 0)
@@ -195,16 +195,11 @@ static int lock_file_timeout(struct lock_file *lk, const char *path,
195 random_initialized = 1;
196 }
197
198 - if (timeout_ms > 0) {
199 - /* avoid overflow */
200 - if (timeout_ms <= LONG_MAX / 1000)
201 - remaining_us = timeout_ms * 1000;
202 - else
203 - remaining_us = LONG_MAX;
204 - }
198 + if (timeout_ms > 0)
199 + remaining_ms = timeout_ms;
200
201 while (1) {
207 - long backoff_ms, wait_us;
202 + long backoff_ms, wait_ms;
203 int fd;
204
205 fd = lock_file(lk, path, flags);
@@ -213,14 +208,14 @@ static int lock_file_timeout(struct lock_file *lk, const char *path,
208 return fd; /* success */
209 else if (errno != EEXIST)
210 return -1; /* failure other than lock held */
216 - else if (timeout_ms > 0 && remaining_us <= 0)
211 + else if (timeout_ms > 0 && remaining_ms <= 0)
212 return -1; /* failure due to timeout */
213
214 backoff_ms = multiplier * INITIAL_BACKOFF_MS;
215 /* back off for between 0.75*backoff_ms and 1.25*backoff_ms */
221 - wait_us = (750 + rand() % 500) * backoff_ms;
222 - sleep_microseconds(wait_us);
223 - remaining_us -= wait_us;
216 + wait_ms = (750 + rand() % 500) * backoff_ms / 1000;
217 + sleep_microseconds(wait_ms*1000);
218 + remaining_ms -= wait_ms;
219
220 /* Recursion: (n+1)^2 = n^2 + 2n + 1 */
221 multiplier += 2*n + 1;