alfred: workaround race condition when batmanif is not ready at boot time
Wait up to 30 seconds during init.d script on boot, so that batmanif can come up. If the timeout is reached, the init.d script refuses to start alfred and related daemons. This prevents an alfred crash when it would start during early boot, before batmanif is available. Instead, alfred is started as soon as batmanif appears, if that happens during the 30-second window. Signed-off-by: Gui Iribarren <gui@altermundi.net> Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
This commit is contained in:
parent
47a466ede6
commit
e2cfab7f28
2 changed files with 18 additions and 2 deletions
|
@ -12,7 +12,7 @@ include $(TOPDIR)/rules.mk
|
|||
#
|
||||
PKG_NAME:=alfred
|
||||
PKG_VERSION:=2013.4.0
|
||||
PKG_RELEASE:=2
|
||||
PKG_RELEASE:=3
|
||||
PKG_MD5SUM:=3891697e127b1037cfc9349fd96e9993
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
|
|
|
@ -16,6 +16,7 @@ pid_file_alfred="/var/run/alfred.pid"
|
|||
pid_file_vis="/var/run/batadv-vis.pid"
|
||||
enable=0
|
||||
vis_enable=0
|
||||
batmanif=""
|
||||
SERVICE_DAEMONIZE=1
|
||||
SERVICE_WRITE_PID=1
|
||||
|
||||
|
@ -23,7 +24,7 @@ alfred_start()
|
|||
{
|
||||
local args=""
|
||||
local section="$1"
|
||||
local disabled interface mode batmanif
|
||||
local disabled interface mode
|
||||
|
||||
# check if section is disabled
|
||||
config_get_bool disabled "$section" disabled 0
|
||||
|
@ -62,6 +63,21 @@ start()
|
|||
if [ "$enable" = "0" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
mesh_dir="/sys/class/net/$batmanif/mesh/"
|
||||
if ! [ -d "$mesh_dir" ] ; then
|
||||
timeout=30
|
||||
echo "${initscript}: waiting $timeout secs for $batmanif interface..."
|
||||
for i in $(seq $timeout); do
|
||||
sleep 1
|
||||
[ -d "$mesh_dir" ] && break
|
||||
if [ $i == $timeout ] ; then
|
||||
echo "${initscript}: $batmanif not detected, alfred not starting."
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
echo "${initscript}: starting alfred"
|
||||
SERVICE_PID_FILE="$pid_file_alfred"
|
||||
service_start /usr/sbin/alfred ${alfred_args}
|
||||
|
|
Loading…
Reference in a new issue