ok... try #3 of the new vwait stuff: it seems to be a good idea to
authorEnrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
Sat, 29 Oct 2005 16:51:26 +0000 (16:51 +0000)
committerEnrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
Sat, 29 Oct 2005 16:51:26 +0000 (16:51 +0000)
read files *after* they are filled with content...

git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@2220 94cd875c-1c1d-0410-91d2-eb244daf1a30

util-vserver/scripts/vserver.functions

index 6b7bf45..afb1fd7 100644 (file)
@@ -812,10 +812,14 @@ function initWait
            $_VWAIT --timeout "$VSHELPER_SYNC_TIMEOUT" \
                --status-fd 3 "$2" \
                >>$_is_tmpdir/out 2>$_is_tmpdir/err 3>$_is_tmpdir/fifo
+           rc=$?
 
-           $_VPS axf | $_EGREP -e "^[^ \t]+[ \t]+$S_CONTEXT[ \t]+" >&4
+           if test "$rc" -ne 0 -a "$rc" -ne 1; then
+               $_VPS axf | $_EGREP -e "^[^ \t]+[ \t]+$S_CONTEXT[ \t]+" >&4
+               killContext "$S_CONTEXT" 9
+           fi
 
-           killContext "$S_CONTEXT" 9
+           exit $rc
        ) 4>$_is_tmpdir/procs &
            
        echo "$!" >$_is_tmpdir/pid
@@ -827,10 +831,11 @@ function initWait
 ## Usage: _waitForVWait <vserver> <fifo> <pid> <procs>
 function _waitForVWait
 {
+    wait "$3" || :
+
     declare -a status
-    declare -r procs=$4
+    declare -r procs=$(cat $4)
 
-    wait "$3" || :
     getFileArray status "$2"
     set -- ${status[0]}
 
@@ -851,8 +856,9 @@ A timeout occured while waiting for the vserver to finish and it will
 be killed by sending a SIGKILL signal. The following process list
 might be useful for finding out the reason of this behavior:
 
-$procs
-"
+----------------------------------------------------------------------
+${procs:+$procs
+}----------------------------------------------------------------------"
                        ;;
 
        (\?\?\?|*)      warning $"\
@@ -873,7 +879,7 @@ function waitForSync
     local vwait_pid=$4
 
     if test -d "$vwait_statdir"; then
-       _waitForVWait "$cfgdir" "$vwait_statdir/fifo" "$( <$vwait_statdir/pid )" "$( < $vwait_statdir/procs )"
+       _waitForVWait "$cfgdir" "$vwait_statdir/fifo" "$( <$vwait_statdir/pid )" "$vwait_statdir/procs"
     elif test -n "$_NEED_VSHELPER_SYNC"; then
        $_VSHELPER_SYNC "$fifo" "$VSHELPER_SYNC_TIMEOUT" || \
            warning $"\