annotate gcc/lock-and-run.sh @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children 1830386684a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 #! /bin/sh
kono
parents:
diff changeset
2 # Shell-based mutex using mkdir.
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 lockdir="$1" prog="$2"; shift 2 || exit 1
kono
parents:
diff changeset
5
kono
parents:
diff changeset
6 # Remember when we started trying to acquire the lock.
kono
parents:
diff changeset
7 count=0
kono
parents:
diff changeset
8 touch lock-stamp.$$
kono
parents:
diff changeset
9
kono
parents:
diff changeset
10 trap 'rm -r "$lockdir" lock-stamp.$$' 0
kono
parents:
diff changeset
11
kono
parents:
diff changeset
12 until mkdir "$lockdir" 2>/dev/null; do
kono
parents:
diff changeset
13 # Say something periodically so the user knows what's up.
kono
parents:
diff changeset
14 if [ `expr $count % 30` = 0 ]; then
kono
parents:
diff changeset
15 # Reset if the lock has been renewed.
kono
parents:
diff changeset
16 if [ -n "`find \"$lockdir\" -newer lock-stamp.$$`" ]; then
kono
parents:
diff changeset
17 touch lock-stamp.$$
kono
parents:
diff changeset
18 count=1
kono
parents:
diff changeset
19 # Steal the lock after 5 minutes.
kono
parents:
diff changeset
20 elif [ $count = 300 ]; then
kono
parents:
diff changeset
21 echo removing stale $lockdir >&2
kono
parents:
diff changeset
22 rm -r "$lockdir"
kono
parents:
diff changeset
23 else
kono
parents:
diff changeset
24 echo waiting to acquire $lockdir >&2
kono
parents:
diff changeset
25 fi
kono
parents:
diff changeset
26 fi
kono
parents:
diff changeset
27 sleep 1
kono
parents:
diff changeset
28 count=`expr $count + 1`
kono
parents:
diff changeset
29 done
kono
parents:
diff changeset
30
kono
parents:
diff changeset
31 echo $prog "$@"
kono
parents:
diff changeset
32 $prog "$@"
kono
parents:
diff changeset
33
kono
parents:
diff changeset
34 # The trap runs on exit.