diff --git a/patches/systemvm/debian/config/root/func.sh b/patches/systemvm/debian/config/root/func.sh index 9c7c494aa5a..17963458e36 100644 --- a/patches/systemvm/debian/config/root/func.sh +++ b/patches/systemvm/debian/config/root/func.sh @@ -21,10 +21,26 @@ # getLockFile() parameters # $1 lock filename # $2 timeout seconds + +#set -x + +getCurrLock() { + result=`ls $__LOCKDIR/*-$1.lock 2>/dev/null | head -n1` + while [ $? -ne 0 ] + do + result=`ls $__LOCKDIR/*-$1.lock 2>/dev/null| head -n1` + done + echo $result +} + getLockFile() { + lock=$1 + __locked=0 __TS=`date +%s%N` - __LOCKFILE="/tmp/$__TS-$$-$1.lock" + __LOCKDIR="/tmp" + __LOCKFILE="$__LOCKDIR/$__TS-$$-$lock.lock" + if [ $2 ] then __TIMEOUT=$2 @@ -34,7 +50,7 @@ getLockFile() { if [ -e $__LOCKFILE ] then - logger -t cloud "Process $0 pid $$ want to get ECLUSIVE LOCK $1 RECURSIVELY!" + logger -t cloud "Process $0 pid $$ want to get ECLUSIVE LOCK $lock RECURSIVELY!" psline=`ps u $$` logger -t cloud "Failed job detail: $psline" echo 0 @@ -47,26 +63,32 @@ getLockFile() { then return fi - + for i in `seq 1 $(($__TIMEOUT * 10))` do - currlock=`ls /tmp/*-$1.lock | head -n1` + currlock=$(getCurrLock $lock) if [ $currlock -ef $__LOCKFILE ] then __locked=1 break fi + sleep 0.1 if [ $((i % 10)) -eq 0 ] then - logger -t cloud "Process $0 pid $$ waiting for the lock $1 for another 1 second" + logger -t cloud "Process $0 pid $$ waiting for the lock $lock for another 1 second" fi done if [ $__locked -ne 1 ] then - logger -t cloud "fail to acquire the lock $1 for process $0 pid $$ after $__TIMEOUT seconds time out!" - cmd=`cat $currlock` - logger -t cloud "waiting for command: $cmd" + logger -t cloud "fail to acquire the lock $lock for process $0 pid $$ after $__TIMEOUT seconds time out!" + cmd=`cat $currlock 2>/dev/null` + if [ $? -eq 0 ] + then + logger -t cloud "waiting for process: $cmd" + else + logger -t cloud "didn't get info about process who we're waiting for" + fi psline=`ps u $$` logger -t cloud "Failed job detail: $psline" rm $__LOCKFILE @@ -78,7 +100,8 @@ getLockFile() { # $1 lock filename # $2 locked(1) or not(0) releaseLockFile() { - __LOCKFILE="/tmp/*-$$-$1.lock" + __LOCKDIR="/tmp" + __LOCKFILE="$__LOCKDIR/*-$$-$1.lock" __locked=$2 if [ "$__locked" == "1" ] then