[PATCH 3/5] alfred: fix boot up

Tim Niemeyer tim.niemeyer at mastersword.de
So Okt 11 21:35:29 CEST 2015


Signed-off-by: Tim Niemeyer <tim.niemeyer at mastersword.de>
---

 ...around-race-condition-when-batmanif-is-no.patch | 70 ++++++++++++++++++++++
 buildscript                                        |  3 +-
 2 files changed, 72 insertions(+), 1 deletion(-)
 create mode 100644 build_patches/0002-alfred-workaround-race-condition-when-batmanif-is-no.patch

diff --git a/build_patches/0002-alfred-workaround-race-condition-when-batmanif-is-no.patch b/build_patches/0002-alfred-workaround-race-condition-when-batmanif-is-no.patch
new file mode 100644
index 0000000..3aa67f5
--- /dev/null
+++ b/build_patches/0002-alfred-workaround-race-condition-when-batmanif-is-no.patch
@@ -0,0 +1,70 @@
+From 8b91b906261348642731731ca94532d8b3455f2c Mon Sep 17 00:00:00 2001
+From: Gui Iribarren <gui at altermundi.net>
+Date: Fri, 13 Dec 2013 16:05:26 -0300
+Subject: [PATCH] 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 at altermundi.net>
+Signed-off-by: Simon Wunderlich <sw at simonwunderlich.de>
+
+Conflicts:
+	alfred/Makefile
+Signed-off-by: Tim Niemeyer <tim.niemeyer at mastersword.de>
+---
+ alfred/files/alfred.init | 18 +++++++++++++++++-
+ 1 file changed, 17 insertions(+), 1 deletion(-)
+
+diff --git a/alfred/files/alfred.init b/alfred/files/alfred.init
+index e52a7bd..cdb4fff 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/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}
+-- 
+2.1.4
+
diff --git a/buildscript b/buildscript
index d4a65bd..62ced64 100755
--- a/buildscript
+++ b/buildscript
@@ -25,7 +25,8 @@ OPENWRT_OLDPACKAGES=(openwrt_oldpackages
 ROUTING=(routing
          https://github.com/openwrt-routing/packages.git
          44318d05898069300ce2ad6eb05eb40f232e7123
-         ../../../build_patches/0001-batman-adv-no-rebroadcast-option.patch)
+         ../../../build_patches/0001-batman-adv-no-rebroadcast-option.patch
+         ../../../build_patches/0002-alfred-workaround-race-condition-when-batmanif-is-no.patch)
 ROUTING_PKGS="kmod-batman-adv alfred"
 
 FASTD=(fastd
-- 
2.1.4




Mehr Informationen über die Mailingliste franken-dev