• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/bin/bash
2#
3# Copyright (c) International Business Machines  Corp., 2005
4# Author: Ram Pai (linuxram@us.ibm.com)
5#
6# This library is free software; you can redistribute it and/or
7# modify it under the terms of the GNU Lesser General Public
8# License as published by the Free Software Foundation; either
9# version 2.1 of the License, or (at your option) any later version.
10#
11# This library is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY; without even the implied warranty of
13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14# Lesser General Public License for more details.
15#
16# You should have received a copy of the GNU Lesser General Public
17# License along with this library; if not, write to the Free Software
18# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19#
20
21
22lockfile="/.nslock"
23SUCCESS=0
24FAIL=1
25otherpid=
26startparent()
27{
28	rm -f $lockfile
29	echo $$ >| ${lockfile}parent
30	while [ 1 ]
31	do
32		otherpid="$(cat ${lockfile}child 2> /dev/null)"
33		if [ -n "$otherpid" -a -d /proc/$otherpid ]
34		then
35			return
36		fi
37	done
38}
39
40startchild()
41{
42	rm -f $lockfile
43	echo $$ >| ${lockfile}child
44	while [ 1 ]
45	do
46		otherpid="$(cat ${lockfile}parent 2> /dev/null)"
47		if [ -n "$otherpid" -a -d /proc/$otherpid ]
48		then
49			return
50		fi
51	done
52}
53
54iamgoingahead()
55{
56	while [ 1 ]
57	do
58		if [ ! -d /proc/$otherpid ]
59		then
60			return $FAIL
61		fi
62		str=`cat $lockfile 2> /dev/null`
63		pid=$(echo $str | awk '{print $1}')
64		error=$(echo $str | awk '{print $2}')
65		if [ "$pid" == "$$" ]
66		then
67			return $error
68		fi
69		sleep 1
70	done
71}
72
73
74goahead()
75{
76	set -x
77	ret=$SUCCESS
78	if [ -n "$1" ]
79	then
80		ret=$1
81	fi
82	echo "$otherpid $ret" >| $lockfile
83	set +x
84}
85