mirror of
https://dev.iopsys.eu/feed/iopsys.git
synced 2025-12-10 07:44:50 +01:00
testnet: avoid potential race condition
Instead of running a second instance of testnet once and in parallel with the background task on interface up/down, the background task is woken up. The avoids the potential for a race where under certain circumstances a ubus event for internet up or down may never be sent. Also remove unused include and add missing quotation.
This commit is contained in:
parent
e383d1d145
commit
ec7ba74900
2 changed files with 19 additions and 16 deletions
|
|
@ -19,5 +19,5 @@ start_service() {
|
|||
}
|
||||
|
||||
reload_service() {
|
||||
[ -n "$TESTNET" ] && procd_running testnet && "$TESTNET" once
|
||||
procd_send_signal testnet
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
#!/bin/sh
|
||||
|
||||
. /lib/functions.sh
|
||||
RELOAD=0
|
||||
WAITING=0
|
||||
|
||||
NETCON=0
|
||||
LASTSTATUS=""
|
||||
|
|
@ -13,32 +14,32 @@ test_connection() {
|
|||
local defroute="$(ip r | grep default | awk '{print$3}' | head -1)"
|
||||
local def6route="$(ip -f inet6 r | grep default | awk '{print$3}')"
|
||||
local ping6dev="$(ip -f inet6 r | grep default | awk '{print$5}')"
|
||||
local resolvfile="$(uci -q get dhcp.@dnsmasq[0].resolvfile)"
|
||||
local resolvfile="$(uci -q get 'dhcp.@dnsmasq[0].resolvfile')"
|
||||
|
||||
if [ -n "$addr" ]; then
|
||||
ping -q -w 5 -c 1 $addr >/dev/null 2>&1 && return 0
|
||||
ping -q -w 5 -c 1 "$addr" >/dev/null 2>&1 && return 0
|
||||
elif [ -n "$defroute" ]; then
|
||||
ping -q -w 5 -c 1 $defroute >/dev/null 2>&1 && return 0
|
||||
ping -q -w 5 -c 1 "$defroute" >/dev/null 2>&1 && return 0
|
||||
if [ -e "$resolvfile" ]; then
|
||||
for nmsrv in $(grep nameserver "$resolvfile" | awk '{print$2}'); do
|
||||
ping -q -w 5 -c 1 $nmsrv >/dev/null 2>&1 && return 0
|
||||
ping -q -w 5 -c 1 "$nmsrv" >/dev/null 2>&1 && return 0
|
||||
done
|
||||
fi
|
||||
elif [ -n "$def6route" -a -n "$ping6dev" ]; then
|
||||
ndisc6 -w 5 -1 $def6route $ping6dev >/dev/null 2>&1 && return 0
|
||||
ndisc6 -w 5 -1 "$def6route" "$ping6dev" >/dev/null 2>&1 && return 0
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
internet_test() {
|
||||
local link dest
|
||||
local dest
|
||||
|
||||
# use the destination address given in config for connectivity check
|
||||
dest="$(uci -q get testnet.global.destination)"
|
||||
# for backwards compatibility
|
||||
[ -n "$dest" ] || dest="$(uci -q get system.@system[0].netping_addr)"
|
||||
[ -n "$dest" ] || dest="$(uci -q get 'system.@system[0].netping_addr')"
|
||||
|
||||
test_connection $dest
|
||||
test_connection "$dest"
|
||||
|
||||
if [ "$?" -eq 0 ]; then
|
||||
NETCON=1
|
||||
|
|
@ -52,7 +53,7 @@ internet_test() {
|
|||
connectivity_test() {
|
||||
internet_test
|
||||
|
||||
if [ $NETCON -eq 1 ]; then
|
||||
if [ "$NETCON" -eq 1 ]; then
|
||||
CURSTATUS=1
|
||||
[ "$CURSTATUS" == "$LASTSTATUS" ] || ubus send internet '{"status" : "online"}'
|
||||
LASTSTATUS=1
|
||||
|
|
@ -63,12 +64,14 @@ connectivity_test() {
|
|||
fi
|
||||
}
|
||||
|
||||
if [ "$1" == "once" ]; then
|
||||
connectivity_test
|
||||
exit 0
|
||||
fi
|
||||
trap RELOAD=1 HUP
|
||||
|
||||
while true; do
|
||||
if [ "$WAITING" -eq 0 ]; then
|
||||
sleep "$SLEEP_TIME" &
|
||||
WAITING=1
|
||||
fi
|
||||
RELOAD=0
|
||||
connectivity_test
|
||||
sleep $SLEEP_TIME
|
||||
[ "$RELOAD" -eq 0 ] && wait && WAITING=0
|
||||
done
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue