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;