From: Jonatan Schlag Date: Wed, 21 Jun 2017 12:07:12 +0000 (+0200) Subject: lock: refactoring functions X-Git-Tag: 009~209 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c73dc5dcd3efba6ce0a43a4d64b4f438afe8710d;p=network.git lock: refactoring functions lock_acquire: Refactor function to set the timeout manually and to avoid the sleep of 0,25s when the timeout value is zero. lock_exists: Provides an easier to check if a lock exists Signed-off-by: Jonatan Schlag Signed-off-by: Michael Tremer --- diff --git a/src/functions/functions.device b/src/functions/functions.device index fc88fecc..09848e27 100644 --- a/src/functions/functions.device +++ b/src/functions/functions.device @@ -910,7 +910,7 @@ device_auto_configure_smp_affinity() { local device=${1} - if lock_acquire "smp-affinity"; then + if lock_acquire "smp-affinity" 60; then device_set_smp_affinity ${device} auto lock_release "smp-affinity" diff --git a/src/functions/functions.lock b/src/functions/functions.lock index fac86bdd..d9c3acfc 100644 --- a/src/functions/functions.lock +++ b/src/functions/functions.lock @@ -29,30 +29,47 @@ __lock_path() { fi } -lock_acquire() { +lock_exists() { local name=${1} assert isset name local lockfile=$(__lock_path ${name}) + if [ -e "${lockfile}" ]; then + return ${EXIT_TRUE} + else + return ${EXIT_FALSE} + fi +} + +lock_acquire() { + local name=${1} + assert isset name + # timeout value in seconds - local timeout=120 + local timeout=${2} + + if ! isset timeout; then + timeout=0 + fi + + local lockfile=$(__lock_path ${name}) + timeout=$(( ${timeout} * 4 )) log DEBUG "Acquiring lock '${name}'" - local free="false" - while [ ${timeout} -gt 0 ]; do - if [ ! -e "${lockfile}" ]; then - free="true" - break - fi - + # Wait until lock is available + while [ ${timeout} -gt 0 ] && [ -e "${lockfile}" ]; do timeout=$(( ${timeout} - 1 )) sleep 0.25 done - assert ${free} "Could not acquire lock '${name}'" + # If another lock still exists, we return an error + if [ -e "${lockfile}" ]; then + error "Could not acquire lock '${name}'" + return ${EXIT_ERROR} + fi # Write out pid to the lockfile and make sure that # nobody else can access it. diff --git a/src/udev/network-hotplug-rename b/src/udev/network-hotplug-rename index c56c70d1..2d474ef5 100644 --- a/src/udev/network-hotplug-rename +++ b/src/udev/network-hotplug-rename @@ -45,7 +45,7 @@ log DEBUG "Called for interface '${INTERFACE}'." device_exists ${INTERFACE} || exit ${EXIT_ERROR} # Acquiring lock for this operation. -lock_acquire ${LOCKFILE} +lock_acquire ${LOCKFILE} 120 # Check if the device is already in use and # prevent the script to touch it in any way.