3 [ "$include_sessionlock" ] && return 0
4 include_sessionlock="$0"
6 # Copyright 2022 Paul Hänsch
8 # Permission to use, copy, modify, and/or distribute this software for any
9 # purpose with or without fee is hereby granted, provided that the above
10 # copyright notice and this permission notice appear in all copies.
12 # THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
15 # SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
18 # IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20 . "$_EXEC/cgilite/storage.sh"
21 . "$_EXEC/cgilite/session.sh"
23 LOCK_TIMEOUT="${LOCK_TIMEOUT:-1200}"
26 local file="$1" timeout="${2:-$LOCK_TIMEOUT}"
29 printf "%i %s\n" "$_DATE" "$SESSION_ID" >>"${file}.lock"
31 if ! read date sid <"${file}.lock"; then
32 debug "Unable to access lock: ${file}.lock"
34 elif [ $((date + timeout)) -lt $_DATE ]; then
36 if LOCK "${file}.lock" 1; then
37 debug "Overriding stale lock: ${file}.lock"
38 printf "%i %s\n" "$_DATE" "$SESSION_ID" >"${file}.lock"
39 RELEASE "${file}.lock"
45 elif [ "$sid" = "$SESSION_ID" -a "$date" -ne "$_DATE" ]; then
47 printf "%i %s\n" "$_DATE" "$SESSION_ID" >"${file}.lock"
50 elif [ "$sid" = "$SESSION_ID" ]; then
60 local file="$1" timeout="${2:-$LOCK_TIMEOUT}"
63 if ! read date sid <"${file}.lock"; then
67 elif [ "$sid" = "$SESSION_ID" -a $((date + timeout)) -lt $_DATE ]; then
68 # if lock is stale, protect against stale override before release
69 if LOCK "${file}.lock" 1; then
71 RELEASE "${file}.lock"
77 elif [ "$sid" = "$SESSION_ID" ]; then