From 068ba959c09b1f3697ccc93dc0ab0b2557719776 Mon Sep 17 00:00:00 2001 From: Phil Sutter Date: Mon, 15 Jan 2018 16:27:31 +0100 Subject: Fix locking if LOCKDIR does not exist The previous conversion to using flock() missed a crucial bit of code which tries to create LOCKDIR once in case opening the lock failed - This patch reestablishes the old behaviour. Reported-by: Tangchen (UVP) Fixes: 6a826591878db ("Use flock() for --concurrent option") Signed-off-by: Phil Sutter Signed-off-by: Pablo Neira Ayuso --- libebtc.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/libebtc.c b/libebtc.c index c0ff8cc..d474248 100644 --- a/libebtc.c +++ b/libebtc.c @@ -143,10 +143,16 @@ int use_lockfd; * or -2 on any other error. */ static int lock_file() { - int fd = open(LOCKFILE, O_CREAT, 00600); - - if (fd < 0) - return -2; + int fd, try = 0; + +retry: + fd = open(LOCKFILE, O_CREAT, 00600); + if (fd < 0) { + if (try == 1 || mkdir(LOCKDIR, 00700)) + return -2; + try = 1; + goto retry; + } return flock(fd, LOCK_EX); } -- cgit v1.2.3