From 5dfc67bf332c73ae1cb690974693721d3ad59307 Mon Sep 17 00:00:00 2001 From: Natanael Copa Date: Mon, 16 May 2016 13:15:42 +0000 Subject: [PATCH] abuild-fetch: retry to create lock on ESTALE --- abuild-fetch.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/abuild-fetch.c b/abuild-fetch.c index aaac7b3..d723550 100644 --- a/abuild-fetch.c +++ b/abuild-fetch.c @@ -26,6 +26,7 @@ THE SOFTWARE. #include #include +#include #include #include #include @@ -99,9 +100,16 @@ int fetch(char *url, const char *destdir) err(1, lockfile); if (fcntl(lockfd, F_SETLK, &fl) < 0) { + int i; printf("Waiting for %s ...\n", lockfile); - if (fcntl(lockfd, F_SETLKW, &fl) < 0) - err(1, "fcntl(F_SETLKW)"); + for (i=0; i<10; i++) { + int r = fcntl(lockfd, F_SETLKW, &fl); + if (r == 0) + break; + if (r == -1 && errno != ESTALE) + err(1, "fcntl(F_SETLKW)"); + sleep(1); + } } if (access(outfile, F_OK) == 0)