annotate gcc/lock-and-run.sh @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 #! /bin/sh
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
2 # Shell-based mutex using mkdir. This script is used in make to prefer
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
3 # serialized execution to avoid consuming too much RAM. If reusing it,
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
4 # bear in mind that the lock-breaking logic is not race-free, so disable
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
5 # it in err() if concurrent execution could cause more serious problems.
111
kono
parents:
diff changeset
6
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
7 self=`basename $0`
111
kono
parents:
diff changeset
8 lockdir="$1" prog="$2"; shift 2 || exit 1
kono
parents:
diff changeset
9
kono
parents:
diff changeset
10 # Remember when we started trying to acquire the lock.
kono
parents:
diff changeset
11 count=0
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
12
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
13 err () {
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
14 if test -f $lockdir/lock-$1.$$; then
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
15 rm -rf $lockdir
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
16 echo "$self: *** (PID $$) removed stale $lockdir" >&2
111
kono
parents:
diff changeset
17
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
18 # Possible variant for uses where races are more problematic:
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
19 #echo "$self: *** (PID $$) giving up, maybe rm -r $lockdir" >&2
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
20 #exit 42
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
21 else
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
22 touch $lockdir/lock-$1.$$
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
23 fi
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
24 }
111
kono
parents:
diff changeset
25
kono
parents:
diff changeset
26 until mkdir "$lockdir" 2>/dev/null; do
kono
parents:
diff changeset
27 # Say something periodically so the user knows what's up.
kono
parents:
diff changeset
28 if [ `expr $count % 30` = 0 ]; then
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
29 # Check for valid lock.
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
30 if pid=`cat $lockdir/pid 2>/dev/null` && kill -0 $pid 2>/dev/null; then
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
31 echo "$self: (PID $$) waiting $count sec to acquire $lockdir from PID $pid" >&2
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
32 elif test -z "$pid"; then
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
33 echo "$self: (PID $$) cannot read $lockdir/pid" >&2
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
34 err nopid
111
kono
parents:
diff changeset
35 else
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
36 echo "$self: (PID $$) cannot signal $lockdir owner PID $pid" >&2
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
37 err dead
111
kono
parents:
diff changeset
38 fi
kono
parents:
diff changeset
39 fi
kono
parents:
diff changeset
40 sleep 1
kono
parents:
diff changeset
41 count=`expr $count + 1`
kono
parents:
diff changeset
42 done
kono
parents:
diff changeset
43
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
44 trap 'rm -rf "$lockdir"' 0
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
45 echo $$ > $lockdir/pidT && mv $lockdir/pidT $lockdir/pid
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
46 echo "$self: (PID $$) acquired $lockdir after $count seconds" >&2
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
47
111
kono
parents:
diff changeset
48 echo $prog "$@"
kono
parents:
diff changeset
49 $prog "$@"
kono
parents:
diff changeset
50
kono
parents:
diff changeset
51 # The trap runs on exit.