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 jonatan.schlag@ipfire.org --- src/functions/functions.device | 2 +- src/functions/functions.lock | 37 +++++++++++++++++++++++++++---------- src/udev/network-hotplug-rename | 2 +- 3 files changed, 29 insertions(+), 12 deletions(-)
diff --git a/src/functions/functions.device b/src/functions/functions.device index fc88fec..09848e2 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 fac86bd..d9c3acf 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 c56c70d..2d474ef 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.