iLock the index/store/cache file descriptors - dedup - deduplicating backup program Err bitreich.org 70 hgit clone git://bitreich.org/dedup/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/dedup/ URL:git://bitreich.org/dedup/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/dedup/ bitreich.org 70 1Log /scm/dedup/log.gph bitreich.org 70 1Files /scm/dedup/files.gph bitreich.org 70 1Refs /scm/dedup/refs.gph bitreich.org 70 1Tags /scm/dedup/tag bitreich.org 70 1README /scm/dedup/file/README.gph bitreich.org 70 1LICENSE /scm/dedup/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit 5e492634032f66a0ea3a17322265eca49efc2592 /scm/dedup/commit/5e492634032f66a0ea3a17322265eca49efc2592.gph bitreich.org 70 1parent bbae2410b3c189917a266eb6fbca6781051e8951 /scm/dedup/commit/bbae2410b3c189917a266eb6fbca6781051e8951.gph bitreich.org 70 hAuthor: sin URL:mailto:sin@2f30.org bitreich.org 70 iDate: Mon, 18 Feb 2019 19:37:51 +0000 Err bitreich.org 70 i Err bitreich.org 70 iLock the index/store/cache file descriptors Err bitreich.org 70 i Err bitreich.org 70 iThis is to prevent two invocations of dedup to corrupt the store. Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M TODO | 1 - Err bitreich.org 70 i M dedup.c | 6 ++++++ Err bitreich.org 70 i Err bitreich.org 70 i2 files changed, 6 insertions(+), 1 deletion(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/TODO b/TODO /scm/dedup/file/TODO.gph bitreich.org 70 i@@ -1,3 +1,2 @@ Err bitreich.org 70 i endianness agnostic Err bitreich.org 70 i-file locking Err bitreich.org 70 i overflow checks Err bitreich.org 70 1diff --git a/dedup.c b/dedup.c /scm/dedup/file/dedup.c.gph bitreich.org 70 i@@ -1,4 +1,5 @@ Err bitreich.org 70 i #include Err bitreich.org 70 i+#include Err bitreich.org 70 i #include Err bitreich.org 70 i #include Err bitreich.org 70 i #include Err bitreich.org 70 i@@ -678,6 +679,11 @@ init(void) Err bitreich.org 70 i if (cfd < 0) Err bitreich.org 70 i err(1, "open %s", CACHEF); Err bitreich.org 70 i Err bitreich.org 70 i+ if (flock(ifd, LOCK_NB | LOCK_EX) < 0 || Err bitreich.org 70 i+ flock(sfd, LOCK_NB | LOCK_EX) < 0 || Err bitreich.org 70 i+ flock(cfd, LOCK_NB | LOCK_EX) < 0) Err bitreich.org 70 i+ errx(1, "busy lock"); Err bitreich.org 70 i+ Err bitreich.org 70 i if (fstat(ifd, &sb) < 0) Err bitreich.org 70 i err(1, "fstat %s", INDEXF); Err bitreich.org 70 i if (sb.st_size != 0) { Err bitreich.org 70 .