diff options
Diffstat (limited to 'abuild-fetch.c')
-rw-r--r-- | abuild-fetch.c | 12 |
1 files 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 <sys/wait.h> #include <err.h> +#include <errno.h> #include <fcntl.h> #include <limits.h> #include <stdio.h> @@ -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) |