xpp: astribank_hook: wait for udev to settle
authorOron Peled <oron.peled@xorcom.com>
Thu, 22 Mar 2012 17:38:57 +0000 (17:38 +0000)
committerTzafrir Cohen <tzafrir.cohen@xorcom.com>
Thu, 22 Mar 2012 17:38:57 +0000 (17:38 +0000)
When running the astribank_hook (only on Astribanks, in XPP_HOTPLUG_DAHDI
mode), wait for all other Astribanks to create all the required device
files.

Signed-off-by: Oron Peled <oron.peled@xorcom.com>
Acked-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>

git-svn-id: http://svn.astersk.org/svn/dahdi/tools/trunk@10585 17933a7a-c749-41c5-a318-cba88f637d49

xpp/astribank_hook

index 074ea31..0888733 100755 (executable)
@@ -68,7 +68,34 @@ NUM_WANTED=`clean_lines | sed '/^$/d' | wc -l`
 NUM_GOOD=`matched_devices | wc -l`
 LOCK="/var/lock/twinstar_startup"
 
+# Wait until udev finished processing our requests
+# so we know the device files were actually created
+# before trying dahdi_cfg et-al.
+wait_for_udev() {
+       UDEV_SETTLE_MAX_TIME=10
+
+       echo "Waiting for udev to settle down..."
+       if [ -x /sbin/udevsettle ]; then
+               # Old system, stand-alone udevsettle command
+               time /sbin/udevsettle --timeout="$UDEV_SETTLE_MAX_TIME"
+       elif [ -x /sbin/udevadm ]; then
+               # Assume modern system, udevadm has settle parameter
+               if ! time /sbin/udevadm settle --timeout="$UDEV_SETTLE_MAX_TIME"
+               then
+                       echo "udevadm failed ($?)."
+                       echo "Fallback to sleep $UDEV_SETTLE_MAX_TIME seconds."
+                       sleep "$UDEV_SETTLE_MAX_TIME"
+               fi
+       else
+               echo "No udevsettle/udevadm."
+               echo "Fallback to sleep $UDEV_SETTLE_MAX_TIME seconds."
+               sleep "$UDEV_SETTLE_MAX_TIME"
+       fi
+       sleep 1 # Wait a bit more (races)
+}
+
 start_dahdi() {
+       wait_for_udev
        script=/etc/init.d/dahdi
        echo "Starting $script."
        "$script" start | logger -i -t "$script"