diff options
author | Lucía Andrea Illanes Albornoz <lucia@luciaillanes.de> | 2023-03-18 09:56:28 +0100 |
---|---|---|
committer | Lucía Andrea Illanes Albornoz <lucia@luciaillanes.de> | 2023-03-18 09:56:28 +0100 |
commit | 670f66a5e1804519e1e1b4554915b7c7da6b72b0 (patch) | |
tree | 0deb4096f8651a67681d3ee8a0b487cccf69a3ad /subr.ex | |
parent | 6382f7e4509eae5fc1e86aedef5fde7fbb733ca8 (diff) | |
download | midipix_build-670f66a5e1804519e1e1b4554915b7c7da6b72b0.tar.bz2 midipix_build-670f66a5e1804519e1e1b4554915b7c7da6b72b0.tar.xz |
Safely send dispatcher messages.
Diffstat (limited to 'subr.ex')
-rw-r--r-- | subr.ex/ex_pkg_dispatch.subr | 19 | ||||
-rw-r--r-- | subr.ex/ex_pkg_exec.subr | 6 |
2 files changed, 22 insertions, 3 deletions
diff --git a/subr.ex/ex_pkg_dispatch.subr b/subr.ex/ex_pkg_dispatch.subr index 1274aa64..217bd360 100644 --- a/subr.ex/ex_pkg_dispatch.subr +++ b/subr.ex/ex_pkg_dispatch.subr @@ -380,4 +380,23 @@ ex_pkg_dispatch() { return "${_epd_rc}"; }; +# +# ex_pkg_dipatch_send() - send message from dispatcher child process to dispatcher parent process across FIFO +# @_op: message operation string +# +# Return: zero (0) invariably. +# +ex_pkg_dispatch_send() { + local _epds_op="${1}"; + shift 1; + + trap '' PIPE; + while ! printf "%s%s\n" "${_epds_op}" "${*:+ "${*}"}" 1>&3 2>/dev/null; do + :; + done; + trap - PIPE; + + return 0; +}; + # vim:filetype=sh textwidth=0 diff --git a/subr.ex/ex_pkg_exec.subr b/subr.ex/ex_pkg_exec.subr index 6b35cff9..568266e7 100644 --- a/subr.ex/ex_pkg_exec.subr +++ b/subr.ex/ex_pkg_exec.subr @@ -139,7 +139,7 @@ exp_pkg_exec() { "${_eppe_restart_at}" "${_eppe_step}"; then _eppe_rc=1; break; - else printf "step %s %s %s\n" "${_eppe_group_name}" "${_eppe_pkg_name}" "${_eppe_step}" >&3; + else ex_pkg_dispatch_send "step" "${_eppe_group_name}" "${_eppe_pkg_name}" "${_eppe_step}"; ex_pkg_state_set2 "${_eppe_workdir}" "${_eppe_pkg_name}" "${_eppe_step}" "${@}"; fi; done; @@ -192,9 +192,9 @@ ex_pkg_exec() { rtl_lconcat "${_epdp_rdispatch_wait}" "${_epdp_pkg_name}"; (trap "if [ \${?} -eq 0 ]; then \ - printf \"done %s %s %d\n\" \"${_epdp_group_name}\" \"${_epdp_pkg_name}\" \"${_epdp_dispatch_count_new}\" >&3; \ + ex_pkg_dispatch_send \"done\" \"${_epdp_group_name}\" \"${_epdp_pkg_name}\" \"${_epdp_dispatch_count_new}\"; \ else \ - printf \"fail %s %s %d\n\" \"${_epdp_group_name}\" \"${_epdp_pkg_name}\" \"${_epdp_dispatch_count_new}\" >&3; \ + ex_pkg_dispatch_send \"fail\" \"${_epdp_group_name}\" \"${_epdp_pkg_name}\" \"${_epdp_dispatch_count_new}\"; \ pkill -U "${$}"; \ fi;" EXIT HUP INT TERM USR1 USR2; set +o errexit -o noglob -o nounset; BUILD_IS_PARENT=0; rtl_log_set_fname ""; rtl_log_set_no_attr 1; |