mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-28 13:16:41 +00:00
Merge pull request #3447 from MilhouseVH/le10_mt_update2
config/functions: eliminate unecessary dashboard flock()
This commit is contained in:
commit
45899b43fa
112
config/functions
112
config/functions
@ -1245,20 +1245,19 @@ pkg_lock() {
|
|||||||
|
|
||||||
local pkg="$1" task="$2" parent_pkg="$3"
|
local pkg="$1" task="$2" parent_pkg="$3"
|
||||||
local this_job="${MTJOBID}"
|
local this_job="${MTJOBID}"
|
||||||
local lock_job lock_seq lock_task lock_pkg
|
local lock_job lock_seq lock_task lock_pkg locked=no
|
||||||
local fail_seq
|
local fail_seq
|
||||||
|
|
||||||
exec 98>"${THREAD_CONTROL}/locks/${pkg}.${task}"
|
exec 98>"${THREAD_CONTROL}/locks/${pkg}.${task}"
|
||||||
if ! flock --nonblock --exclusive 98; then
|
while [ : ]; do
|
||||||
while [ : ]; do
|
read -r lock_job lock_seq lock_task lock_pkg <<<$(cat "${THREAD_CONTROL}/locks/${pkg}.${task}.owner" 2>/dev/null)
|
||||||
read -r lock_job lock_seq lock_task lock_pkg <<<$(cat "${THREAD_CONTROL}/locks/${pkg}.${task}.owner" 2>/dev/null)
|
[ -n "${lock_job}" ] && break
|
||||||
[ -n "${lock_job}" ] && break || sleep 1
|
flock --wait 1 --exclusive 98 && locked=yes && break
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ "${lock_job}/${lock_seq}" != "${this_job}/${PARALLEL_SEQ}" ]; then
|
if [ "${locked}" = "no" -a "${lock_job}/${lock_seq}" != "${this_job}/${PARALLEL_SEQ}" ]; then
|
||||||
pkg_lock_status "STALLED" "${parent_pkg}" "${task}" "$(printf "waiting on [%02d] %s %s" ${lock_job} "${lock_task}" "${lock_pkg}")"
|
pkg_lock_status "STALLED" "${parent_pkg}" "${task}" "$(printf "waiting on [%02d] %s %s" ${lock_job} "${lock_task}" "${lock_pkg}")"
|
||||||
flock --exclusive 98
|
flock --exclusive 98
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# As we now have the lock, if .failed still exists then a previous process must have failed
|
# As we now have the lock, if .failed still exists then a previous process must have failed
|
||||||
@ -1295,14 +1294,17 @@ pkg_lock_status() {
|
|||||||
[ -n "${msg}" ] && line+=" (${msg})"
|
[ -n "${msg}" ] && line+=" (${msg})"
|
||||||
|
|
||||||
echo "${line}" >>"${THREAD_CONTROL}/history"
|
echo "${line}" >>"${THREAD_CONTROL}/history"
|
||||||
) 94>"${THREAD_CONTROL}/locks/.history"
|
|
||||||
|
|
||||||
[ "${DASHBOARD}" != "no" ] && update_dashboard "${status}" "${pkg}" "${task}" "${msg}"
|
if [ "${DASHBOARD}" != "no" ]; then
|
||||||
|
update_dashboard "${status}" "${pkg}" "${task}" "${msg}"
|
||||||
|
fi
|
||||||
|
) 94>"${THREAD_CONTROL}/locks/.history"
|
||||||
|
|
||||||
if [ "${status}" = "LOCKED" ]; then
|
if [ "${status}" = "LOCKED" ]; then
|
||||||
echo "${PARALLEL_SEQ}" > "${THREAD_CONTROL}/locks/${pkg}.${task}.failed"
|
echo "${PARALLEL_SEQ}" > "${THREAD_CONTROL}/locks/${pkg}.${task}.failed"
|
||||||
echo "${this_job} ${PARALLEL_SEQ} ${task} ${pkg}" >"${THREAD_CONTROL}/locks/${pkg}.${task}.owner"
|
echo "${this_job} ${PARALLEL_SEQ} ${task} ${pkg}" >"${THREAD_CONTROL}/locks/${pkg}.${task}.owner"
|
||||||
elif [ "${status}" = "UNLOCK" ]; then
|
elif [ "${status}" = "UNLOCK" ]; then
|
||||||
|
rm "${THREAD_CONTROL}/locks/${pkg}.${task}.owner"
|
||||||
rm "${THREAD_CONTROL}/locks/${pkg}.${task}.failed"
|
rm "${THREAD_CONTROL}/locks/${pkg}.${task}.failed"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -1310,51 +1312,45 @@ pkg_lock_status() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
update_dashboard() {
|
update_dashboard() {
|
||||||
|
[ "${MTWITHLOCKS}" != "yes" ] && return 0
|
||||||
|
|
||||||
local status="$1" pkg="$2" task="$3" msg="$4"
|
local status="$1" pkg="$2" task="$3" msg="$4"
|
||||||
local line sedline preamble num elapsed projdevarch
|
local line sedline preamble num elapsed projdevarch
|
||||||
local boldred boldgreen boldyellow endcolor
|
local boldred boldgreen boldyellow endcolor
|
||||||
|
|
||||||
(
|
sedline=$((MTJOBID + 2))
|
||||||
flock --exclusive 97
|
|
||||||
|
|
||||||
[ -n "${MTJOBID}" ] && sedline=$((MTJOBID + 2)) || sedline=1
|
num=$(cat "${THREAD_CONTROL}/status" | wc -l)
|
||||||
|
while [ ${num} -lt ${sedline} ]; do echo "" >>"${THREAD_CONTROL}/status"; num=$((num + 1)); done
|
||||||
|
|
||||||
num=$(cat "${THREAD_CONTROL}/status" | wc -l)
|
num=$(($(cat "${THREAD_CONTROL}/progress.prev") + 1))
|
||||||
while [ ${num} -lt ${sedline} ]; do echo "" >>"${THREAD_CONTROL}/status"; num=$((num + 1)); done
|
projdevarch="${PROJECT}/"
|
||||||
|
[ -n "${DEVICE}" ] && projdevarch+="${DEVICE}/"
|
||||||
|
projdevarch+="${TARGET_ARCH}"
|
||||||
|
TZ=UTC0 printf -v elapsed "%(%H:%M:%S)T" $(($(date +%s) - MTBUILDSTART))
|
||||||
|
printf -v preamble "%s Dashboard (%s) - %d of %d jobs completed, %s elapsed" "${DISTRONAME}" "${projdevarch}" ${num} ${MTMAXJOBS} "${elapsed}"
|
||||||
|
printf -v preamble "%b%-105s %s" "\e[2J\e[0;0H" "${preamble//\//\\/}" "$(date "+%Y-%m-%d %H:%M:%S")"
|
||||||
|
|
||||||
num=$(($(cat "${THREAD_CONTROL}/progress.prev") + 1))
|
if [ "${DISABLE_COLORS}" != "yes" ]; then
|
||||||
projdevarch="${PROJECT}/"
|
boldred="\e[1;31m"
|
||||||
[ -n "${DEVICE}" ] && projdevarch+="${DEVICE}/"
|
boldgreen="\e[1;32m"
|
||||||
projdevarch+="${TARGET_ARCH}"
|
boldyellow="\e[1;33m"
|
||||||
TZ=UTC0 printf -v elapsed "%(%H:%M:%S)T" $(($(date +%s) - MTBUILDSTART))
|
white="\e[0;37m"
|
||||||
printf -v preamble "%s Dashboard (%s) - %d of %d jobs completed, %s elapsed" "${DISTRONAME}" "${projdevarch}" ${num} ${MTMAXJOBS} "${elapsed}"
|
endcolor="\e[0m"
|
||||||
printf -v preamble "%b%-105s %s" "\e[2J\e[0;0H" "${preamble//\//\\/}" "$(date "+%Y-%m-%d %H:%M:%S")"
|
|
||||||
|
|
||||||
# Only update the header when caller is not a worker thread
|
case "${status}" in
|
||||||
if [ -z "${MTJOBID}" ]; then
|
IDLE) color="${white}";;
|
||||||
sed -e "1s/.*/${preamble}/" -i "${THREAD_CONTROL}/status"
|
STALLED) color="${boldyellow}";;
|
||||||
else
|
MUTEX/W) color="${boldyellow}";;
|
||||||
if [ "${DISABLE_COLORS}" != "yes" ]; then
|
FAILED ) color="${boldred}";;
|
||||||
boldred="\e[1;31m"
|
*) color="${boldgreen}";;
|
||||||
boldgreen="\e[1;32m"
|
esac
|
||||||
boldyellow="\e[1;33m"
|
fi
|
||||||
white="\e[0;37m"
|
|
||||||
endcolor="\e[0m"
|
|
||||||
|
|
||||||
case "${status}" in
|
printf -v line "[%02d\/%0*d] %b%-7s%b %-7s %-35s" ${MTJOBID} ${#MTMAXJOBS} ${PARALLEL_SEQ:-0} "${color}" "${status//\//\\/}" "${endcolor}" "${task}" "${pkg}"
|
||||||
IDLE) color="${white}";;
|
[ -n "${msg}" ] && line+=" ${msg//\//\\/}"
|
||||||
STALLED) color="${boldyellow}";;
|
|
||||||
MUTEX/W) color="${boldyellow}";;
|
|
||||||
FAILED ) color="${boldred}";;
|
|
||||||
*) color="${boldgreen}";;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
printf -v line "[%02d\/%0*d] %b%-7s%b %-7s %-35s" ${MTJOBID} ${#MTMAXJOBS} ${PARALLEL_SEQ:-0} "${color}" "${status//\//\\/}" "${endcolor}" "${task}" "${pkg}"
|
sed -e "1s/.*/${preamble}/;${sedline}s/.*/${line}/" -i "${THREAD_CONTROL}/status"
|
||||||
[ -n "${msg}" ] && line+=" ${msg//\//\\/}"
|
|
||||||
sed -e "1s/.*/${preamble}/;${sedline}s/.*/${line}/" -i "${THREAD_CONTROL}/status"
|
|
||||||
fi
|
|
||||||
) 97>"${THREAD_CONTROL}/locks/.status"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Thread concurrency helpers to avoid concurrency issues with some code,
|
# Thread concurrency helpers to avoid concurrency issues with some code,
|
||||||
@ -1365,19 +1361,18 @@ acquire_exclusive_lock() {
|
|||||||
|
|
||||||
local pkg="$1" task="$2" lockfile="${3:-global}"
|
local pkg="$1" task="$2" lockfile="${3:-global}"
|
||||||
local this_job="${MTJOBID}"
|
local this_job="${MTJOBID}"
|
||||||
local lock_job lock_seq lock_task lock_pkg
|
local lock_job lock_seq lock_task lock_pkg locked=no
|
||||||
|
|
||||||
exec 96>"${THREAD_CONTROL}/locks/.mutex.${lockfile}"
|
exec 96>"${THREAD_CONTROL}/locks/.mutex.${lockfile}"
|
||||||
if ! flock --nonblock --exclusive 96; then
|
while [ : ]; do
|
||||||
while [ : ]; do
|
read -r lock_job lock_seq lock_task lock_pkg <<<$(cat "${THREAD_CONTROL}/locks/.mutex.${lockfile}.owner" 2>/dev/null)
|
||||||
read -r lock_job lock_seq lock_task lock_pkg <<<$(cat "${THREAD_CONTROL}/locks/.mutex.${lockfile}.owner" 2>/dev/null)
|
[ -n "${lock_job}" ] && break
|
||||||
[ -n "${lock_job}" ] && break || sleep 1
|
flock --wait 1 --exclusive 96 && locked=yes && break
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ "${lock_job}/${lock_seq}" != "${this_job}/${PARALLEL_SEQ}" ]; then
|
if [ "${locked}" = "no" -a "${lock_job}/${lock_seq}" != "${this_job}/${PARALLEL_SEQ}" ]; then
|
||||||
pkg_lock_status "MUTEX/W" "${pkg}" "${task}" "$(printf "mutex: %s; waiting on [%02d] %s %s" "${lockfile}" ${lock_job} "${lock_task}" "${lock_pkg}")"
|
pkg_lock_status "MUTEX/W" "${pkg}" "${task}" "$(printf "mutex: %s; waiting on [%02d] %s %s" "${lockfile}" ${lock_job} "${lock_task}" "${lock_pkg}")"
|
||||||
flock --exclusive 96
|
flock --exclusive 96
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
pkg_lock_status "MUTEX" "${pkg}" "${task}" "mutex: ${lockfile}"
|
pkg_lock_status "MUTEX" "${pkg}" "${task}" "mutex: ${lockfile}"
|
||||||
@ -1388,10 +1383,11 @@ acquire_exclusive_lock() {
|
|||||||
release_exclusive_lock() {
|
release_exclusive_lock() {
|
||||||
[ "${MTWITHLOCKS}" != "yes" ] && return 0
|
[ "${MTWITHLOCKS}" != "yes" ] && return 0
|
||||||
|
|
||||||
local pkg="$1" task="$2"
|
local pkg="$1" task="$2" lockfile="${3:-global}"
|
||||||
|
|
||||||
pkg_lock_status "ACTIVE" "${pkg}" "${task}"
|
pkg_lock_status "ACTIVE" "${pkg}" "${task}"
|
||||||
|
|
||||||
|
rm "${THREAD_CONTROL}/locks/.mutex.${lockfile}.owner"
|
||||||
flock --unlock 96 2>/dev/null
|
flock --unlock 96 2>/dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user