diff --git a/Shorewall/lib.base b/Shorewall/lib.base index 3b791d809..3c1eed64f 100644 --- a/Shorewall/lib.base +++ b/Shorewall/lib.base @@ -101,6 +101,7 @@ mutex_on() try=0 local lockf lockf=${LOCKFILE:=${VARDIR}/lock} + local lockpid MUTEX_TIMEOUT=${MUTEX_TIMEOUT:-60} @@ -108,8 +109,22 @@ mutex_on() [ -d ${VARDIR} ] || mkdir -p ${VARDIR} + if [ -f $lockf ]; then + lockpid=`cat ${lockf} 2> /dev/null` + if [ -z "$lockpid" -o $lockpid = 0 ]; then + rm -f ${lockf} + error_message "WARNING: Stale lockfile ${lockf} removed" + elif ! qt ps p ${lockpid}; then + rm -f ${lockf} + error_message "WARNING: Stale lockfile ${lockf} from pid ${lockpid} removed" + fi + fi + if qt mywhich lockfile; then lockfile -${MUTEX_TIMEOUT} -r1 ${lockf} + chmod u+w ${lockf} + echo $$ > ${lockf} + chmod u-w ${lockf} else while [ -f ${lockf} -a ${try} -lt ${MUTEX_TIMEOUT} ] ; do sleep 1 diff --git a/Shorewall6/lib.base b/Shorewall6/lib.base index c7b55a187..a4dcae25c 100644 --- a/Shorewall6/lib.base +++ b/Shorewall6/lib.base @@ -105,6 +105,7 @@ mutex_on() try=0 local lockf lockf=${LOCKFILE:=${VARDIR}/lock} + local lockpid MUTEX_TIMEOUT=${MUTEX_TIMEOUT:-60} @@ -112,8 +113,22 @@ mutex_on() [ -d ${VARDIR} ] || mkdir -p ${VARDIR} + if [ -f $lockf ]; then + lockpid=`cat ${lockf} 2> /dev/null` + if [ -z "$lockpid" -o $lockpid = 0 ]; then + rm -f ${lockf} + error_message "WARNING: Stale lockfile ${lockf} removed" + elif ! qt ps p ${lockpid}; then + rm -f ${lockf} + error_message "WARNING: Stale lockfile ${lockf} from pid ${lockpid} removed" + fi + fi + if qt mywhich lockfile; then lockfile -${MUTEX_TIMEOUT} -r1 ${lockf} + chmod u+w ${lockf} + echo $$ > ${lockf} + chmod u-w ${lockf} else while [ -f ${lockf} -a ${try} -lt ${MUTEX_TIMEOUT} ] ; do sleep 1