summaryrefslogtreecommitdiff
path: root/autolock.sh
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1996-08-12 02:44:03 +0000
committerUlrich Drepper <drepper@redhat.com>1996-08-12 02:44:03 +0000
commita8874eadae699b5d4583aab3a860e06ecfcf5e5a (patch)
tree5165cfc605b53e459cc641ce9c2e614619ee867f /autolock.sh
parenta3e59be8d1e0dbb1d2ab25c3dc4b0ad04e159ad2 (diff)
Last minute change.cvs/libc-ud-960811-2
Mon Aug 12 04:33:09 1996 Ulrich Drepper <drepper@cygnus.com> * nss/nsswitch.c (__nss_database_lookup): Always release locks before returning. Reported by Miles Bader. (distributes): Add databases.def.
Diffstat (limited to 'autolock.sh')
-rwxr-xr-xautolock.sh45
1 files changed, 45 insertions, 0 deletions
diff --git a/autolock.sh b/autolock.sh
new file mode 100755
index 0000000000..88e27332e6
--- /dev/null
+++ b/autolock.sh
@@ -0,0 +1,45 @@
+#! /bin/sh
+# interlock - wrap program invocation in lock to allow
+# parallel builds to work.
+# Written by Tom Tromey <tromey@cygnus.com>, Aug 10 1996
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# Usage:
+# interlock lock-dir-name program args-to-program...
+
+dirname="$1"
+program="$2"
+
+shift
+shift
+
+while (mkdir $dirname > /dev/null 2>&1 && exit 1 || exit 0); do
+ # Wait a bit.
+ sleep 1
+done
+
+# Race condition here: if interrupted after the loop but before this
+# trap, the lock can be left around.
+trap "rmdir $dirname > /dev/null 2>&1" 1 2 3 15
+
+# We have the lock, so run the program.
+$program ${1+"$@"}
+ret=$?
+
+# Release the lock.
+rmdir $dirname > /dev/null 2>&1
+
+exit $ret