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:
Gui Iribarren 2013-12-13 16:05:26 -03:00 committed by Simon Wunderlich
parent 47a466ede6
commit e2cfab7f28
2 changed files with 18 additions and 2 deletions

View File

@ -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

View File

@ -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}