summaryrefslogtreecommitdiffstats
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:28:00 +0000
commitfd428a09eeda0199cc1ff53c6ea858cf35d36762 (patch)
tree33720b4020cc04588160b5f18466910cc3021581
parent7911ec5de977abb8df859dbe4721ed1aad4b95a1 (diff)
downloadpoky-fd428a09eeda0199cc1ff53c6ea858cf35d36762.zip
poky-fd428a09eeda0199cc1ff53c6ea858cf35d36762.tar.gz
poky-fd428a09eeda0199cc1ff53c6ea858cf35d36762.tar.bz2
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. (From OE-Core rev: f1a126f2b0f419b2de573e2367d41d8ccc28b346) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rwxr-xr-xscripts/runqemu-internal19
1 files changed, 7 insertions, 12 deletions
diff --git a/scripts/runqemu-internal b/scripts/runqemu-internal
index dfdde05..33fedc6 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"