diff options
Diffstat (limited to 'libsmutil/t-lockfile-0.sh')
-rwxr-xr-x | libsmutil/t-lockfile-0.sh | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/libsmutil/t-lockfile-0.sh b/libsmutil/t-lockfile-0.sh new file mode 100755 index 000000000000..bc4ed311f410 --- /dev/null +++ b/libsmutil/t-lockfile-0.sh @@ -0,0 +1,70 @@ +#!/bin/sh +# Copyright (c) 2021 Proofpoint, Inc. and its suppliers. +# All rights reserved. +# +# By using this file, you agree to the terms and conditions set +# forth in the LICENSE file which can be found at the top level of +# the sendmail distribution. +# +# ---------------------------------------- +# test t-lockfile, analyze result +# ---------------------------------------- + +fail() +{ + echo "$0: $@" + exit 1 +} + +PRG=./t-lockfile +O=l.log + +analyze() +{ + # the "owner" unlock operation must be before + # the "client" lock operation can succeed + U=`grep -n 'owner=1, unlock.*done' $O | cut -d: -f1 | head -n1` + [ x"$U" = "x" ] && U=`grep -n '_close' $O | cut -d: -f1 | head -n1` + L=`grep -n 'owner=0, lock.* ok' $O | cut -d: -f1` + [ x"$U" = "x" ] && return 1 + [ x"$L" = "x" ] && return 1 + [ $U -lt $L ] +} + +all=true +while getopts 2a: FLAG +do + case "${FLAG}" in + 2) all=false;; + a) O=${OPTARG} + analyze || fail "$opts: unlock1=$U, lock2=$L" + exit;; + esac +done +shift `expr ${OPTIND} - 1` + +[ -x ${PRG} ] || fail "missing ${PRG}" + +if $all +then +for opts in "" "-r" "-n" "-nr" +do + ${PRG} $opts > $O 2>&1 || fail "$opts: $?" + analyze || fail "$opts: unlock1=$U, lock2=$L" +done +fi + +# try with two processes +for opts in "" "-r" +do +rm -f $O +${PRG} -W >> $O 2>&1 || fail "-W: $?" +wpid=$! +${PRG} -R $opts >> $O 2>&1 || fail "-R $opts: $?" +rpid=$! +analyze || fail "$opts: unlock1=$U, lock2=$L" +wait $wpid +wait $rpid +done + +exit 0 |