[oe-commits] Richard Purdie : scripts/runqemu-internal: Fix lock races

git at git.openembedded.org git at git.openembedded.org
Wed Mar 27 17:27:21 UTC 2013


Module: openembedded-core.git
Branch: danny
Commit: f1a126f2b0f419b2de573e2367d41d8ccc28b346
URL:    http://git.openembedded.org/?p=openembedded-core.git&a=commit;h=f1a126f2b0f419b2de573e2367d41d8ccc28b346

Author: Richard Purdie <richard.purdie at linuxfoundation.org>
Date:   Wed Mar 20 22:58:30 2013 +0000

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 at linuxfoundation.org>

---

 scripts/runqemu-internal |   19 +++++++------------
 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"





More information about the Openembedded-commits mailing list