Repository : ssh://git@open-mesh.org/openwrt-feed-alfred
On branch : master
commit 0a7457d02124597182b8e3174561dd2d8a449f93 Author: Gui Iribarren gui@altermundi.net Date: Fri Dec 13 16:05:26 2013 -0300
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
0a7457d02124597182b8e3174561dd2d8a449f93 alfred/Makefile | 2 +- alfred/files/alfred.init | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/alfred/Makefile b/alfred/Makefile index 0367ebb..3d70246 100644 --- a/alfred/Makefile +++ b/alfred/Makefile @@ -12,7 +12,7 @@ include $(TOPDIR)/rules.mk # PKG_NAME:=alfred PKG_VERSION:=2013.4.0 -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_REV:=67e0d7e9cad9f1e2143925183da64a14ab28eb0f
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_RELEASE).tar.gz diff --git a/alfred/files/alfred.init b/alfred/files/alfred.init index b678d4c..b777b53 100755 --- a/alfred/files/alfred.init +++ b/alfred/files/alfred.init @@ -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}