Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/freebsd/poudriere.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBryan Drewery <bryan@shatow.net>2020-06-05 02:03:26 +0300
committerBryan Drewery <bryan@shatow.net>2021-09-03 02:00:16 +0300
commit3e102dda712c9825c756bb9374e60c76124ce61e (patch)
tree86b2e8802fcaae11e1f383055693d44f7eadd44b /src
parent26e4a93ee6ed92b9af7af86aea2a317135526482 (diff)
Release all slocks on exit to avoid pid reuse issues.
Conflicts: src/share/poudriere/common.sh
Diffstat (limited to 'src')
-rw-r--r--src/share/poudriere/common.sh18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/share/poudriere/common.sh b/src/share/poudriere/common.sh
index 6f553fcc..b6c41580 100644
--- a/src/share/poudriere/common.sh
+++ b/src/share/poudriere/common.sh
@@ -1319,6 +1319,7 @@ exit_handler() {
_jlock jlock
rm -rf "${jlock}" 2>/dev/null || :
fi
+ slock_release_all || :
if [ -n "${POUDRIERE_TMPDIR-}" ]; then
rm -rf "${POUDRIERE_TMPDIR}" >/dev/null 2>&1 || :
fi
@@ -5929,7 +5930,9 @@ slock_acquire() {
mkdir -p "${SHARED_LOCK_DIR}" >/dev/null 2>&1 || :
lockpath="${SHARED_LOCK_DIR}/lock-poudriere-shared-${lockname}"
- _lock_acquire "${lockname}" "${lockpath}" "${waittime}"
+ _lock_acquire "${lockname}" "${lockpath}" "${waittime}" || return
+ # This assumes SHARED_LOCK_DIR isn't overridden by caller
+ SLOCKS="${SLOCKS:+${SLOCKS} }${lockname}"
}
_lock_release() {
@@ -5973,7 +5976,18 @@ slock_release() {
local lockpath
lockpath="${SHARED_LOCK_DIR}/lock-poudriere-shared-${lockname}"
- _lock_release "${lockname}" "${lockpath}"
+ _lock_release "${lockname}" "${lockpath}" || return
+ list_remove SLOCKS "${lockname}"
+}
+
+slock_release_all() {
+ [ $# -eq 0 ] || eargs slock_release_all
+ local lockname
+
+ [ -z "${SLOCKS-}" ] && return 0
+ for lockname in ${SLOCKS}; do
+ slock_release "${lockname}"
+ done
}
lock_have() {