Lock the index/store/cache file descriptors - dedup - deduplicating backup program HTML git clone git://bitreich.org/dedup/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/dedup/ DIR Log DIR Files DIR Refs DIR Tags DIR README DIR LICENSE --- DIR commit 5e492634032f66a0ea3a17322265eca49efc2592 DIR parent bbae2410b3c189917a266eb6fbca6781051e8951 HTML Author: sin <sin@2f30.org> Date: Mon, 18 Feb 2019 19:37:51 +0000 Lock the index/store/cache file descriptors This is to prevent two invocations of dedup to corrupt the store. Diffstat: M TODO | 1 - M dedup.c | 6 ++++++ 2 files changed, 6 insertions(+), 1 deletion(-) --- DIR diff --git a/TODO b/TODO @@ -1,3 +1,2 @@ endianness agnostic -file locking overflow checks DIR diff --git a/dedup.c b/dedup.c @@ -1,4 +1,5 @@ #include <sys/stat.h> +#include <sys/file.h> #include <err.h> #include <fcntl.h> #include <stdio.h> @@ -678,6 +679,11 @@ init(void) if (cfd < 0) err(1, "open %s", CACHEF); + if (flock(ifd, LOCK_NB | LOCK_EX) < 0 || + flock(sfd, LOCK_NB | LOCK_EX) < 0 || + flock(cfd, LOCK_NB | LOCK_EX) < 0) + errx(1, "busy lock"); + if (fstat(ifd, &sb) < 0) err(1, "fstat %s", INDEXF); if (sb.st_size != 0) {