1*2fb4f839SGregory Neil Shapiro#!/bin/sh 2*2fb4f839SGregory Neil Shapiro# Copyright (c) 2021 Proofpoint, Inc. and its suppliers. 3*2fb4f839SGregory Neil Shapiro# All rights reserved. 4*2fb4f839SGregory Neil Shapiro# 5*2fb4f839SGregory Neil Shapiro# By using this file, you agree to the terms and conditions set 6*2fb4f839SGregory Neil Shapiro# forth in the LICENSE file which can be found at the top level of 7*2fb4f839SGregory Neil Shapiro# the sendmail distribution. 8*2fb4f839SGregory Neil Shapiro# 9*2fb4f839SGregory Neil Shapiro# ---------------------------------------- 10*2fb4f839SGregory Neil Shapiro# test t-lockfile, analyze result 11*2fb4f839SGregory Neil Shapiro# ---------------------------------------- 12*2fb4f839SGregory Neil Shapiro 13*2fb4f839SGregory Neil Shapirofail() 14*2fb4f839SGregory Neil Shapiro{ 15*2fb4f839SGregory Neil Shapiro echo "$0: $@" 16*2fb4f839SGregory Neil Shapiro exit 1 17*2fb4f839SGregory Neil Shapiro} 18*2fb4f839SGregory Neil Shapiro 19*2fb4f839SGregory Neil ShapiroPRG=./t-lockfile 20*2fb4f839SGregory Neil ShapiroO=l.log 21*2fb4f839SGregory Neil Shapiro 22*2fb4f839SGregory Neil Shapiroanalyze() 23*2fb4f839SGregory Neil Shapiro{ 24*2fb4f839SGregory Neil Shapiro # the "owner" unlock operation must be before 25*2fb4f839SGregory Neil Shapiro # the "client" lock operation can succeed 26*2fb4f839SGregory Neil Shapiro U=`grep -n 'owner=1, unlock.*done' $O | cut -d: -f1 | head -n1` 27*2fb4f839SGregory Neil Shapiro [ x"$U" = "x" ] && U=`grep -n '_close' $O | cut -d: -f1 | head -n1` 28*2fb4f839SGregory Neil Shapiro L=`grep -n 'owner=0, lock.* ok' $O | cut -d: -f1` 29*2fb4f839SGregory Neil Shapiro [ x"$U" = "x" ] && return 1 30*2fb4f839SGregory Neil Shapiro [ x"$L" = "x" ] && return 1 31*2fb4f839SGregory Neil Shapiro [ $U -lt $L ] 32*2fb4f839SGregory Neil Shapiro} 33*2fb4f839SGregory Neil Shapiro 34*2fb4f839SGregory Neil Shapiroall=true 35*2fb4f839SGregory Neil Shapirowhile getopts 2a: FLAG 36*2fb4f839SGregory Neil Shapirodo 37*2fb4f839SGregory Neil Shapiro case "${FLAG}" in 38*2fb4f839SGregory Neil Shapiro 2) all=false;; 39*2fb4f839SGregory Neil Shapiro a) O=${OPTARG} 40*2fb4f839SGregory Neil Shapiro analyze || fail "$opts: unlock1=$U, lock2=$L" 41*2fb4f839SGregory Neil Shapiro exit;; 42*2fb4f839SGregory Neil Shapiro esac 43*2fb4f839SGregory Neil Shapirodone 44*2fb4f839SGregory Neil Shapiroshift `expr ${OPTIND} - 1` 45*2fb4f839SGregory Neil Shapiro 46*2fb4f839SGregory Neil Shapiro[ -x ${PRG} ] || fail "missing ${PRG}" 47*2fb4f839SGregory Neil Shapiro 48*2fb4f839SGregory Neil Shapiroif $all 49*2fb4f839SGregory Neil Shapirothen 50*2fb4f839SGregory Neil Shapirofor opts in "" "-r" "-n" "-nr" 51*2fb4f839SGregory Neil Shapirodo 52*2fb4f839SGregory Neil Shapiro ${PRG} $opts > $O 2>&1 || fail "$opts: $?" 53*2fb4f839SGregory Neil Shapiro analyze || fail "$opts: unlock1=$U, lock2=$L" 54*2fb4f839SGregory Neil Shapirodone 55*2fb4f839SGregory Neil Shapirofi 56*2fb4f839SGregory Neil Shapiro 57*2fb4f839SGregory Neil Shapiro# try with two processes 58*2fb4f839SGregory Neil Shapirofor opts in "" "-r" 59*2fb4f839SGregory Neil Shapirodo 60*2fb4f839SGregory Neil Shapirorm -f $O 61*2fb4f839SGregory Neil Shapiro${PRG} -W >> $O 2>&1 || fail "-W: $?" 62*2fb4f839SGregory Neil Shapirowpid=$! 63*2fb4f839SGregory Neil Shapiro${PRG} -R $opts >> $O 2>&1 || fail "-R $opts: $?" 64*2fb4f839SGregory Neil Shapirorpid=$! 65*2fb4f839SGregory Neil Shapiroanalyze || fail "$opts: unlock1=$U, lock2=$L" 66*2fb4f839SGregory Neil Shapirowait $wpid 67*2fb4f839SGregory Neil Shapirowait $rpid 68*2fb4f839SGregory Neil Shapirodone 69*2fb4f839SGregory Neil Shapiro 70*2fb4f839SGregory Neil Shapiroexit 0 71