#!/bin/bash -eu

cwd="${0%/*}"

. data/bin/shell-locks

show_self_locks()
{
	grep -E -o -e "^lock:.* FLOCK .* (READ|WRITE) " "/proc/self/fdinfo"/* 2>/dev/null ||:
}

fd_lock 91 "$cwd/lock-1"
fd_lock 92 "$cwd/lock-2"
fd_lock 93 "$cwd/lock-3"

echo === step 1 ===
show_self_locks

fd_unlock 92

echo === step 2 ===
show_self_locks

fd_lock 92 "$cwd/lock-2"

echo === step 3 ===
show_self_locks

fd_trylock 92 "$cwd/lock-2"

echo === step 4 ===
show_self_locks

fd_unlock 91
fd_unlock 92
fd_unlock 93

echo === step 5 ===
show_self_locks

fd_rlock 91 "$cwd/lock-1"
fd_rlock 92 "$cwd/lock-1"
fd_rlock 93 "$cwd/lock-1"

echo === step 6 ===
show_self_locks

fd_trylock 94 "$cwd/lock-1" ||
	echo "unable to take write lock"

fd_unlock 91
fd_unlock 92
fd_unlock 93

fd_trylock 94 "$cwd/lock-1" ||
	echo "unable to take write lock"

echo === step 7 ===
show_self_locks


