File: lock

package info (click to toggle)
xchpst 0.7.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 304 kB
  • sloc: ansic: 2,792; sh: 75; makefile: 47
file content (46 lines) | stat: -rwxr-xr-x 1,450 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/bin/bash

fail () {
  echo Test failed because: "$@" >&2
  kill %coproc 2>/dev/null || true
  exit 1
}

t=$(mktemp -d ${AUTOPKGTEST_TMP:+-p $AUTOPKGTEST_TMP})
lock="$t/lock"
trap "{ rm -rf $t; kill %1 %2 2>/dev/null || true; }" EXIT

coproc XCHPST { exec xchpst -l $t/lock bash -c "echo READY; read -s;"; }
read -u ${XCHPST[0]}
echo "XCHPST: $REPLY"

timeout 4 xchpst -L $lock uname 2>&1
[ $? -eq 111 ] || fail "didn't bail on taken lock"
echo "'xchpst -L' correctly bailed out with error on lock already taken"

timeout 4 xchpst -bsetlock xchpst -xn $lock uname || fail "didn't bail silently on taken lock"
echo "'setlock -xn' emulation correctly bailed out silently on lock already taken"

timeout 4 xchpst -l $lock uname
[ $? -eq 124 ] || fail "didn't block on taken lock"
echo "'xchpst -l' correctly blocked on lock already taken"

echo "EXIT" >&${XCHPST[1]}

wait %coproc

timeout 4 xchpst -L $lock uname
[ $? -eq  0 ] || fail "didn't succeed on free lock"
echo "'xchpst -L' correctly succeeded taking a free lock"

timeout 4 xchpst -bsetlock xchpst -xn $lock uname || fail "didn't succeed on free lock"
echo "'setlock -xn' emulation correctly succeeded taking a free lock"

timeout 4 xchpst -l $lock uname
[ $? -eq  0 ] || fail "waited on free lock"
echo "'xchpst -l' correctly succeeded waiting on a free lock"

xchpst -l $lock sleep 12 &
sleep 4
timeout 16 xchpst -l $lock uname
echo "'xchpst -l' correctly waited for lock then succeeded"