PROCD_RELOAD_DELAY=1000
_PROCD_SERVICE=
+procd_lock() {
+ local basescript=$(readlink "$initscript")
+ local service_name="$(basename ${basescript:-$initscript})"
+
+ flock -n 1000 &> /dev/null
+ if [ "$?" != "0" ]; then
+ exec 1000>/var/lock/procd_${service_name}.lock
+ flock 1000
+ if [ "$?" != "0" ]; then
+ logger "warning: procd flock for $service_name failed"
+ fi
+ fi
+}
+
_procd_call() {
local old_cb
}
_procd_wrapper() {
+ procd_lock
while [ -n "$1" ]; do
eval "$1() { _procd_call _$1 \"\$@\"; }"
shift
_procd_open_trigger
service_triggers
_procd_close_trigger
+ _procd_open_data
+ service_data
+ _procd_close_data
_procd_ubus_call ${1:-set}
}
json_close_array
}
+_procd_open_data() {
+ let '_procd_data_open = _procd_data_open + 1'
+ [ "$_procd_data_open" -gt 1 ] && return
+ json_add_object "data"
+}
+
+_procd_close_data() {
+ let '_procd_data_open = _procd_data_open - 1'
+ [ "$_procd_data_open" -lt 1 ] || return
+ json_close_object
+}
+
_procd_open_validate() {
json_select ..
json_add_array "validate"
json_add_string "" "$@"
json_close_array
;;
- nice)
+ nice|term_timeout)
json_add_int "$type" "$1"
;;
reload_signal)
local instance="$2"
local signal="$3"
+ case "$signal" in
+ [A-Z]*) signal="$(kill -l "$signal" 2>/dev/null)" || return 1;;
+ esac
+
json_init
json_add_string name "$service"
[ -n "$instance" -a "$instance" != "*" ] && json_add_string instance "$instance"
json_add_int port "$port"
[ -n "$1" ] && {
json_add_array txt
- for txt in $@; do json_add_string "" $txt; done
+ for txt in "$@"; do json_add_string "" "$txt"; done
json_select ..
}
json_select ..
procd_add_mdns() {
procd_open_data
json_add_object "mdns"
- procd_add_mdns_service $@
+ procd_add_mdns_service "$@"
json_close_object
procd_close_data
}