summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhil Sutter <phil@nwl.cc>2018-01-15 16:27:31 +0100
committerPablo Neira Ayuso <pablo@netfilter.org>2018-01-17 03:32:37 +0100
commit068ba959c09b1f3697ccc93dc0ab0b2557719776 (patch)
treecd5cb73b511c26cb5df4b91005a8557d31e4e743
parent6a826591878db3fa9e2a94b87a3d5edd8e0fc442 (diff)
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) <tang.chen@huawei.com> Fixes: 6a826591878db ("Use flock() for --concurrent option") Signed-off-by: Phil Sutter <phil@nwl.cc> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
-rw-r--r--libebtc.c14
1 files 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);
}