Run on_exit commands in FILO order
authorReto Buerki <reet@codelabs.ch>
Sun, 9 Dec 2012 09:50:28 +0000 (10:50 +0100)
committerTobias Brunner <tobias@strongswan.org>
Thu, 17 Jan 2013 15:54:54 +0000 (16:54 +0100)
testing/scripts/build-baseimage
testing/scripts/build-umlhostfs
testing/scripts/build-umlrootfs
testing/scripts/function.sh

index 81dd6f0..a555d2c 100755 (executable)
@@ -30,6 +30,7 @@ execute "qemu-img create -f qcow2 $ROOTFS ${ROOTFSSIZE}M"
 
 log_action "Connecting image to NBD device $NBDEV"
 execute "qemu-nbd -c $NBDEV $ROOTFS"
+do_on_exit qemu-nbd -d $NBDEV
 
 log_action "Partitioning disk"
 sfdisk /dev/nbd0 -D -uM >>$LOGFILE 2>&1 << EOF
@@ -49,14 +50,12 @@ execute "mkfs.ext3 $NBDPARTITION"
 
 log_action "Mounting $NBDPARTITION to $LOOPDIR"
 execute "mount $NBDPARTITION $LOOPDIR"
+do_on_exit graceful_umount $LOOPDIR
 
 log_action "Using $CACHEDIR as archive for apt"
 mkdir -p $APTCACHE
 execute "mount -o bind $CACHEDIR $APTCACHE"
-
 do_on_exit graceful_umount $APTCACHE
-do_on_exit graceful_umount $LOOPDIR
-do_on_exit qemu-nbd -d $NBDEV
 
 log_action "Running debootstrap ($ROOTFSSUITE, $ROOTFSARCH)"
 execute "debootstrap --arch=$ROOTFSARCH --include=$PACKAGES $ROOTFSSUITE $LOOPDIR $ROOTFSMIRROR"
index d3cb2f6..ed026b6 100755 (executable)
@@ -40,6 +40,7 @@ else
 fi
 
 # just to be sure
+do_on_exit qemu-nbd -d $NBDEV
 do_on_exit umount $LOOPDIR
 
 for host in $HOSTS
index 6131c1d..f6bcaa7 100755 (executable)
@@ -37,22 +37,21 @@ execute "cp $ROOTFS $BASE"
 
 log_action "Connecting base image to NBD device $NBDEV"
 execute "qemu-nbd -c $NBDEV $BASE"
+do_on_exit qemu-nbd -d $NBDEV
 partprobe $NBDEV
 
 log_action "Mounting $NBDPARTITION to $LOOPDIR"
 execute "mount $NBDPARTITION $LOOPDIR"
+do_on_exit umount $LOOPDIR
 
 log_action "Mounting proc filesystem to $LOOPDIR/proc"
 execute "mount -t proc none $LOOPDIR/proc"
+do_on_exit umount $LOOPDIR/proc
 
 mkdir -p $LOOPDIR/root/compile
 log_action "Mounting $ROOTFSCOMPILEDIR as /root/compile"
 execute "mount -o bind $ROOTFSCOMPILEDIR $LOOPDIR/root/compile"
-
 do_on_exit umount $LOOPDIR/root/compile
-do_on_exit umount $LOOPDIR/proc
-do_on_exit umount $LOOPDIR
-do_on_exit qemu-nbd -d $NBDEV
 
 echo "Installing software from source"
 RECPDIR=$TESTDIR/testing/scripts/recipes
index 2a801a7..649e32b 100755 (executable)
@@ -97,16 +97,17 @@ declare -a on_exit_items
 # perform registered actions on exit
 on_exit()
 {
-       for i in "${on_exit_items[@]}"
+       for ((onex=${#on_exit_items[@]}-1; onex>=0; onex--))
        do
-               eval $i >>$LOGFILE 2>&1
+               echo "On_Exit: ${on_exit_items[$onex]}" >>$LOGFILE
+               ${on_exit_items[$onex]} >>$LOGFILE 2>&1
        done
        on_exit_items=""
        trap - EXIT
 }
 
 # register a command to execute when the calling script terminates. The
-# registered commands are called in FIFO order.
+# registered commands are called in FILO order.
 # $* - command to register
 do_on_exit()
 {
@@ -126,7 +127,7 @@ graceful_umount()
        [ ! $secs ] && secs=5
 
        let steps=$secs*100
-       for i in `seq 1 $steps`
+       for st in `seq 1 $steps`
        do
                umount $1 >>$LOGFILE 2>&1
                mount | grep $1 >/dev/null 2>&1