]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - usr.bin/sed/tests/inplace_race_test.sh
Merge llvm-project release/18.x llvmorg-18.1.1-0-gdba2a75e9c7e
[FreeBSD/FreeBSD.git] / usr.bin / sed / tests / inplace_race_test.sh
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.
33 if 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
40 fi
41
42 echo "1..1"
43
44 data=abababab
45 data=$data$data$data$data
46 data=$data$data$data$data
47 data=$data$data$data$data
48 data=$data$data$data$data
49 data="BEGIN
50 $data
51 END"
52 for i in 0 1 2 3 4 5 6 7 8 9; do
53         echo "$data" >file$i
54 done
55 len=${#data}
56
57 i=0
58 while [ $i -lt 100 ]; do
59         ${SED} -i.prev "s/$i/ab/" file[0-9]
60         i=$((i+1))
61 done &
62 sedproc=$!
63
64 while :; do
65         set -- file[0-9]
66         if [ $# -ne 10 ]; then
67                 echo "not ok 1 inplace_race"
68                 exit 3
69         fi
70 done &
71 checkproc=$!
72
73 wait $sedproc
74 kill $checkproc 2>/dev/null
75 wait $checkproc >/dev/null 2>&1
76 if [ $? -ne 3 ]; then
77         echo "ok 1 inplace_race"
78 fi