From 6f6354f622ef92418cfd3f111064c37d4a6cd6c9 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Sat, 2 Oct 2021 21:43:05 -0400 Subject: switch locking to flock If the tool gets killed while holding its lock, the files stay locked, and future runs hang waiting for the lock, until a dev manually clears things. Switch to flock as it provides a process-based lock and the kernel will release it automatically when we exit. Signed-off-by: Mike Frysinger --- build-docbook-catalog | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/build-docbook-catalog b/build-docbook-catalog index b815bfc..b4d7223 100755 --- a/build-docbook-catalog +++ b/build-docbook-catalog @@ -69,14 +69,11 @@ main() { mkdir -p "${ROOT}${ROOTCONFDIR}" || error "could not create ${ROOTCONFDIR}" fi - local lock="${ROOT}${ROOTCONFDIR}"/build-docbook-catalog-lock + local lock="${ROOT}/run/lock/build-docbook-catalog.lock" ( # Lock the dir to avoid trashing other runs that might # be running parallel. - touch "${lock}".$$ && \ - until ln "${lock}".$$ "${lock}" 2>/dev/null; do sleep 1; done && \ - rm "${lock}".$$ - [[ -f ${lock}.$$ ]] && error "unable to lock ${ROOTCONFDIR}" + flock 200 create_catalogs # will exit on error for type in xsl xsl-ns xsl-saxon xsl-xalan; do @@ -98,8 +95,9 @@ main() { populate_entities fi - ) - rm "${lock}" + # NB: Don't delete the lock since we can't delete files by fd, and if we do + # it by path, we might delete the lock while other processes grab it. + ) 200>>"${lock}" exit 0 } -- cgit v1.2.3-65-gdbad