aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoel Rosdahl <joel@rosdahl.net>2020-02-26 22:48:31 +0100
committerJoel Rosdahl <joel@rosdahl.net>2020-03-03 20:21:49 +0100
commit41425fc94b1df95d36c3254db5b67e29c257cb6b (patch)
treeea6995841582e9211e8d7f956e9cfcc534ed79e0
parent6aba3fb3b48e8dc4919b29b6807a63007ee705eb (diff)
downloadccache-41425fc94b1df95d36c3254db5b67e29c257cb6b.tar.gz
ccache-41425fc94b1df95d36c3254db5b67e29c257cb6b.tar.bz2
ccache-41425fc94b1df95d36c3254db5b67e29c257cb6b.zip
Cap time to sleep to 10 ms when failing to acquire a lock
(cherry picked from commit 41ffc7ec009237da51040c6059b1bcd7903af30d)
-rw-r--r--src/lockfile.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/lockfile.cpp b/src/lockfile.cpp
index a58a4907..6905b3e3 100644
--- a/src/lockfile.cpp
+++ b/src/lockfile.cpp
@@ -38,8 +38,9 @@ lockfile_acquire(const char* path, unsigned staleness_limit)
char* initial_content = nullptr;
const char* hostname = get_hostname();
bool acquired = false;
- unsigned to_sleep = 1000; // Microseconds.
- unsigned slept = 0; // Microseconds.
+ unsigned to_sleep = 1000; // Microseconds.
+ unsigned max_to_sleep = 10000; // Microseconds.
+ unsigned slept = 0; // Microseconds.
while (true) {
free(my_content);
@@ -171,7 +172,7 @@ lockfile_acquire(const char* path, unsigned staleness_limit)
to_sleep);
usleep(to_sleep);
slept += to_sleep;
- to_sleep *= 2;
+ to_sleep = std::min(max_to_sleep, 2 * to_sleep);
}
out: