Files
gniza4cp/lib/locking.sh
shuki a162536585 Rename product from gniza to gniza4cp across entire codebase
- CLI binary: bin/gniza -> bin/gniza4cp
- Install path: /usr/local/gniza4cp/
- Config path: /etc/gniza4cp/
- Log path: /var/log/gniza4cp/
- WHM plugin: gniza4cp-whm/
- cPanel plugin: cpanel/gniza4cp/
- AdminBin: Gniza4cp::Restore
- Perl modules: Gniza4cpWHM::*, Gniza4cpCPanel::*
- DaisyUI theme: gniza4cp
- All internal references, branding, paths updated
- Git remote updated to gniza4cp repo
2026-03-05 21:03:30 +02:00

29 lines
735 B
Bash

#!/usr/bin/env bash
# gniza4cp/lib/locking.sh — flock-based concurrency control
declare -g LOCK_FD=""
acquire_lock() {
local lock_file="${LOCK_FILE:-$DEFAULT_LOCK_FILE}"
local lock_dir; lock_dir=$(dirname "$lock_file")
mkdir -p "$lock_dir" || die "Cannot create lock directory: $lock_dir"
exec {LOCK_FD}>"$lock_file"
if ! flock -n "$LOCK_FD"; then
die "Another gniza4cp process is running (lock: $lock_file)" "$EXIT_LOCKED"
fi
echo $$ >&"$LOCK_FD"
log_debug "Lock acquired: $lock_file (PID $$)"
}
release_lock() {
if [[ -n "$LOCK_FD" ]]; then
flock -u "$LOCK_FD" 2>/dev/null
exec {LOCK_FD}>&- 2>/dev/null
LOCK_FD=""
log_debug "Lock released"
fi
}