aboutsummaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2013-03-20 22:58:30 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2013-03-27 17:25:05 +0000
commitf1a126f2b0f419b2de573e2367d41d8ccc28b346 (patch)
tree7a43c60a6b93c86137e36c85146848b5588141cd /scripts
parent22a54741167dd6cc011a1b98787c82cc992158ed (diff)
downloadopenembedded-core-f1a126f2b0f419b2de573e2367d41d8ccc28b346.tar.gz
scripts/runqemu-internal: Fix lock races
There are two problems here. Firstly the grep command is unanchored so pid 345 will match against 12345 and so on. The second issue is that there are several context switched between attempting the lock and then writing the pid to it. Between the two issues, there were issues appearing on the autobuilder due to these conflicts. This patch replaces the mechanism with flock on fd 8 which should be a safer mechanism to use. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/runqemu-internal19
1 files changed, 7 insertions, 12 deletions
diff --git a/scripts/runqemu-internal b/scripts/runqemu-internal
index dfdde05e24..33fedc6c4b 100755
--- a/scripts/runqemu-internal
+++ b/scripts/runqemu-internal
@@ -112,18 +112,12 @@ acquire_lock() {
return 1
fi
- if [ -e "$lockfile.lock" ]; then
- # Check that the lockfile is not stale
- ps=`ps -eo pid | grep $(cat $lockfile.lock)`
- if [ -z "$ps" ]; then
- echo "WARNING: Stale lock file detected, deleting $lockfile.lock."
- rm -f $lockfile.lock
- echo $$ > $lockfile.lock
- else
- return 1
- fi
- else
- echo $$ > $lockfile.lock
+ touch $lockfile.lock
+ exec 8>$lockfile.lock
+ flock -n -x 8
+ if [ $? -ne 0 ]; then
+ exec 8>&-
+ return 1
fi
return 0
@@ -137,6 +131,7 @@ release_lock() {
fi
rm -f $lockfile.lock
+ exec 8>&-
}
LOCKDIR="/tmp/qemu-tap-locks"