[dahdi-commits] tzafrir: tools/trunk r10068 - /tools/trunk/xpp/astribank_hook

SVN commits to the DAHDI project dahdi-commits at lists.digium.com
Thu Jul 21 08:40:21 CDT 2011


Author: tzafrir
Date: Thu Jul 21 08:40:18 2011
New Revision: 10068

URL: http://svnview.digium.com/svn/dahdi?view=rev&rev=10068
Log:
astribank_hook: startup lock and more

* Silently exit right away if user did not set XPP_HOTPLUG_DAHDI.
* Only one Astribank should be allowed to run the startup script:
  - Protect that section with a "lock" (symlinking a file).
  - Sadly we can't rely on /run and may have to wait for a r/w file-system.
  - And thus even this waiting needs to be run in the background
    as to not hold udev.

Signed-off-by: Tzafrir Cohen <tzafrir.cohen at xorcom.com>

Modified:
    tools/trunk/xpp/astribank_hook

Modified: tools/trunk/xpp/astribank_hook
URL: http://svnview.digium.com/svn/dahdi/tools/trunk/xpp/astribank_hook?view=diff&rev=10068&r1=10067&r2=10068
==============================================================================
--- tools/trunk/xpp/astribank_hook (original)
+++ tools/trunk/xpp/astribank_hook Thu Jul 21 08:40:18 2011
@@ -25,6 +25,10 @@
 	dahdi_conf="$liveconf"
 else
 	dahdi_conf="/etc/dahdi"
+fi
+
+if [ "$XPP_HOTPLUG_DAHDI" != yes ]; then
+	exit 0
 fi
 
 export XPPORDER_CONF="$dahdi_conf/xpp_order"
@@ -62,26 +66,24 @@
 
 NUM_WANTED=`clean_lines | sed '/^$/d' | wc -l`
 NUM_GOOD=`matched_devices | wc -l`
+LOCK="/var/lock/twinstar_startup"
 
 start_dahdi() {
 	script=/etc/init.d/dahdi
-	if [ "$XPP_HOTPLUG_DAHDI" = yes ]; then
-		echo "Starting $script."
-		"$script" start | logger -i -t "$script"
-		status=$?
-		echo "Status($script): $status"
-	else
-		echo "$0: Skip($script): No XPP_HOTPLUG_DAHDI=yes in /etc/dahdi/init.conf"
-		exit 0
-	fi
+	echo "Starting $script."
+	"$script" start | logger -i -t "$script"
+	status=$?
+	echo "Status($script): $status"
 	if [ -x "$dir/twinstar_hook" ]; then
 		"$dir/twinstar_hook"
 	fi
 	# Finished astribanks
 	echo "Removing semaphore"
 	astribank_is_starting -v -r
+	rm -f "$LOCK"
 }
 
+#echo "$0: $ACTION($XBUS_NAME)" | $LOGGER
 case "$ACTION" in
 add)
 	;;
@@ -90,9 +92,28 @@
 online)
 	echo "$ACTION($XBUS_NAME): $NUM_GOOD/$NUM_WANTED from $XPPORDER_CONF" | $LOGGER
 	if [ "$NUM_GOOD" -eq "$NUM_WANTED" ]; then
-		echo "START-DAHDI: Total $NUM_GOOD online." | $LOGGER
-		# Fork services
-		start_dahdi < /dev/null 2>&1 | $LOGGER &
+		(
+			# Delay the initialization of the Astribank until the filesystem
+			# is mounted read-write:
+			test_file="/var/lock/astribank_test_file"
+			for i in `seq 1 20`; do
+				if touch $test_file 2> /dev/null; then
+					rm -f $test_file
+					break
+				else
+					echo "$0: [$i] - Failed writing '$test_file'...waiting" | $LOGGER
+					sleep 1;
+				fi
+		        done
+
+			if ln -s "$XBUS_NAME" "$LOCK"; then
+				echo "START-DAHDI: Total $NUM_GOOD online." | $LOGGER
+				# Fork services
+				start_dahdi < /dev/null 2>&1 | $LOGGER
+			else
+				echo "$0: Was started: $(ls -l $LOCK)" | $LOGGER
+			fi
+		) < /dev/null 2>&1 | $LOGGER &
 	fi
 	;;
 offline)
@@ -100,8 +121,9 @@
 	if [ "$NUM_GOOD" -eq 0 ]; then
 		echo "All Astribanks offline" | $LOGGER
 		if [ -x "$dir/twinstar_hook" ]; then
-			"$dir/twinstar_hook"
+			"$dir/twinstar_hook" || :
 		fi
+		rm -f "$LOCK"
 	fi
 	;;
 *)




More information about the dahdi-commits mailing list