}
device_auto_configure_smp_affinity() {
- assert [ $# -eq 1 ]
-
- local device=${1}
-
- if lock_acquire "smp-affinity" 60; then
- device_set_smp_affinity ${device} auto
+ local device="${1}"
+ assert isset device
- lock_release "smp-affinity"
- fi
+ lock "smp-affinity" \
+ device_set_smp_affinity "${device}" "auto"
}
device_set_smp_affinity() {
# #
###############################################################################
-editor_cleanup() {
- # Cleanup after a file was edited
- assert [ $# -eq 2 ]
-
- local file=${1}
- local temp_file=${2}
-
- lock_release "${file}.lock"
- rm -f ${temp_file}
-}
-
editor_find_best() {
# Open a file with the best available editor
assert [ $# -eq 1 ]
}
editor() {
- # This function open a file for editing and take care of all preperation and postprocessing
- assert [ $# -ge 1 ]
+ local file="${1}"
+ assert isset file
- local file=${1}
if [ ! -f ${file} ] || [ ! -w ${file} ]; then
error "${file} is not valid file or is not writeable"
return ${EXIT_ERROR}
fi
- local check_func=${2}
+ lock "${file}.lock" __editor "$@"
+}
- # check if the file is locked
- if lock_exists "${file}.lock"; then
- error "Cannot edit ${file} because it is locked"
- return ${EXIT_ERROR}
- fi
+__editor() {
+ # This function open a file for editing and take care of all preperation and postprocessing
+ assert [ $# -ge 1 ]
- # lock the file
- if ! lock_acquire "${file}.lock"; then
- error "Cannot lock file ${file}"
- return ${EXIT_ERROR}
- fi
+ local file="${1}"
+ local check_func="${2}"
# create a temporary file
- local temp_file=$(mktemp)
+ local temp_file="$(mktemp)"
if ! [ -f "${temp_file}" ]; then
error "Cannot create temporary file"
# edit the file
if ! editor_find_best "${temp_file}"; then
error "Could not edit ${file}"
- # cleanup
- editor_cleanup "${file}" "${temp_file}"
+
+ # Delete temporary file
+ file_delete "${temp_file}"
+
+ return ${EXIT_ERROR}
fi
# run the check if we have one
if isset check_func && ! editor_check "${check_func}" "${temp_file}"; then
+ # Delete temporary file
+ file_delete "${temp_file}"
+
return ${EXIT_ERROR}
fi
# copy the changes back
cp -f "${temp_file}" "${file}"
- # cleanup
- editor_cleanup "${file}" "${temp_file}"
-
+ # Delete temporary file
+ file_delete "${temp_file}"
}
editor_check() {
# #
###############################################################################
-__lock_path() {
- local name=${1}
-
- if [ "${name:0:1}" = "/" ]; then
- echo "${name}"
- else
- echo "${LOCK_DIR}/network-${name}"
- fi
-}
-
lock() {
local lock="${1}"
shift
exit ${ret}
) 9>${lock} || exit $?
}
-
-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=${2}
-
- if ! isset timeout; then
- timeout=0
- fi
-
- local lockfile=$(__lock_path ${name})
-
- timeout=$(( ${timeout} * 4 ))
-
- log DEBUG "Acquiring lock '${name}'"
-
- # Wait until lock is available
- while [ ${timeout} -gt 0 ] && [ -e "${lockfile}" ]; do
- timeout=$(( ${timeout} - 1 ))
- sleep 0.25
- done
-
- # 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.
- echo "$$" > ${lockfile}
- chmod 600 ${lockfile}
-}
-
-lock_release() {
- local name=${1}
- assert isset name
-
- local lockfile=$(__lock_path ${name})
-
- log DEBUG "Releasing lock '${name}'"
-
- # Remove the lockfile (okay if it does not exist).
- rm -f ${lockfile}
-}