diff options
author | Bryan Drewery <bryan@shatow.net> | 2020-06-05 02:03:26 +0300 |
---|---|---|
committer | Bryan Drewery <bryan@shatow.net> | 2021-09-03 02:00:16 +0300 |
commit | 3e102dda712c9825c756bb9374e60c76124ce61e (patch) | |
tree | 86b2e8802fcaae11e1f383055693d44f7eadd44b /src | |
parent | 26e4a93ee6ed92b9af7af86aea2a317135526482 (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.sh | 18 |
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() { |