summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTzafrir Cohen <tzafrir.cohen@xorcom.com>2011-07-21 13:40:18 +0000
committerTzafrir Cohen <tzafrir.cohen@xorcom.com>2011-07-21 13:40:18 +0000
commitdf3a9f880353c2fcfd56c0543158ebe00a4bd11f (patch)
tree730bd55da53eaebff6601ae6588aea995cba772c
parentb62d766c1338accbf7c2a58dc290837123cdb13d (diff)
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@xorcom.com> git-svn-id: http://svn.asterisk.org/svn/dahdi/tools/trunk@10068 a0bf4364-ded3-4de4-8d8a-66a801d63aff
-rwxr-xr-xxpp/astribank_hook48
1 files changed, 35 insertions, 13 deletions
diff --git a/xpp/astribank_hook b/xpp/astribank_hook
index ae38635..074ea31 100755
--- a/xpp/astribank_hook
+++ b/xpp/astribank_hook
@@ -27,6 +27,10 @@ else
dahdi_conf="/etc/dahdi"
fi
+if [ "$XPP_HOTPLUG_DAHDI" != yes ]; then
+ exit 0
+fi
+
export XPPORDER_CONF="$dahdi_conf/xpp_order"
if [ ! -r "$XPPORDER_CONF" ]; then
(
@@ -62,26 +66,24 @@ matched_devices() {
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 @@ remove)
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 @@ offline)
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
;;
*)