From 5c5a15ea2a3610897ee8e0ea49951988b28da77c Mon Sep 17 00:00:00 2001 From: Urban Modig Date: Wed, 1 Oct 2025 10:39:23 +0200 Subject: [PATCH] fixed --- download.sh | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/download.sh b/download.sh index a333cb6..5332e96 100644 --- a/download.sh +++ b/download.sh @@ -33,19 +33,29 @@ WORKDIR=$(mktemp -d "$TMPDIR/${SCRIPT_NAME%.sh}.XXXXXX") cleanup_tmp() { rm -rf "$WORKDIR" 2>/dev/null || true; } # ----------------------------- lock/unlock logic ------------------------------ +# Use a fixed numeric FD (200) for wider Bash compatibility (e.g., macOS bash 3.2). LOCK_FD=200 LOCK_FILE="/tmp/${SCRIPT_NAME}.lock" +LOCK_HELD=0 + lock() { log "Creating lock… ($LOCK_FILE)" - # shellcheck disable=SC2094 - exec {LOCK_FD}>"$LOCK_FILE" || die "Could not open lock file $LOCK_FILE" - if ! flock -n "$LOCK_FD"; then + exec ${LOCK_FD}>"$LOCK_FILE" || die "Could not open lock file $LOCK_FILE" + if flock -n ${LOCK_FD}; then + LOCK_HELD=1 + else die "Lock failed — another process is running." fi } + unlock() { - log "Releasing lock…" - flock -u "$LOCK_FD" || true + if (( LOCK_HELD )); then + log "Releasing lock…" + flock -u ${LOCK_FD} || true + # Close the FD to avoid lingering descriptors + exec ${LOCK_FD}>&- || true + LOCK_HELD=0 + fi } # Always cleanup on exit/interrupt @@ -321,4 +331,4 @@ elif [[ -n $file ]]; then fi # cleanup happens via trap -exit 0 +exit 0 \ No newline at end of file