1#!/bin/sh 2 3#- 4# Copyright (c) 2011 Jilles Tjoelker 5# All rights reserved. 6# 7# Redistribution and use in source and binary forms, with or without 8# modification, are permitted provided that the following conditions 9# are met: 10# 1. Redistributions of source code must retain the above copyright 11# notice, this list of conditions and the following disclaimer. 12# 2. Redistributions in binary form must reproduce the above copyright 13# notice, this list of conditions and the following disclaimer in the 14# documentation and/or other materials provided with the distribution. 15# 16# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26# SUCH DAMAGE. 27# 28 29: "${SED=sed}" 30 31# This test really needs an SMP system. On an UP system, it will 32# usually pass even if the race condition exists. 33if command -v cpuset >/dev/null; then 34 case `cpuset -g -p $$` in 35 *,*) ;; 36 *) 37 echo '1..0 # Skipped: not an SMP system' 38 exit 0 ;; 39 esac 40fi 41 42echo "1..1" 43 44data=abababab 45data=$data$data$data$data 46data=$data$data$data$data 47data=$data$data$data$data 48data=$data$data$data$data 49data="BEGIN 50$data 51END" 52for i in 0 1 2 3 4 5 6 7 8 9; do 53 echo "$data" >file$i 54done 55len=${#data} 56 57i=0 58while [ $i -lt 100 ]; do 59 ${SED} -i.prev "s/$i/ab/" file[0-9] 60 i=$((i+1)) 61done & 62sedproc=$! 63 64while :; do 65 set -- file[0-9] 66 if [ $# -ne 10 ]; then 67 echo "not ok 1 inplace_race" 68 exit 3 69 fi 70done & 71checkproc=$! 72 73wait $sedproc 74kill $checkproc 2>/dev/null 75wait $checkproc >/dev/null 2>&1 76if [ $? -ne 3 ]; then 77 echo "ok 1 inplace_race" 78fi 79