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.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. (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 dfdde05e24..33fedc6c4b 100755
--- a/scripts/runqemu-internal
+++ b/scripts/runqemu-internal
@@ -112,18 +112,12 @@ acquire_lock() {
112 return 1 112 return 1
113 fi 113 fi
114 114
115 if [ -e "$lockfile.lock" ]; then 115 touch $lockfile.lock
116 # Check that the lockfile is not stale 116 exec 8>$lockfile.lock
117 ps=`ps -eo pid | grep $(cat $lockfile.lock)` 117 flock -n -x 8
118 if [ -z "$ps" ]; then 118 if [ $? -ne 0 ]; then
119 echo "WARNING: Stale lock file detected, deleting $lockfile.lock." 119 exec 8>&-
120 rm -f $lockfile.lock 120 return 1
121 echo $$ > $lockfile.lock
122 else
123 return 1
124 fi
125 else
126 echo $$ > $lockfile.lock
127 fi 121 fi
128 122
129 return 0 123 return 0
@@ -137,6 +131,7 @@ release_lock() {
137 fi 131 fi
138 132
139 rm -f $lockfile.lock 133 rm -f $lockfile.lock
134 exec 8>&-
140} 135}
141 136
142LOCKDIR="/tmp/qemu-tap-locks" 137LOCKDIR="/tmp/qemu-tap-locks"