call 'vattribute' with '--flag default'
[util-vserver.git] / util-vserver / scripts / vserver.functions
index 19a8f00..be47739 100644 (file)
@@ -376,7 +376,7 @@ function _generateChcontextOptions
     OPTS_VCONTEXT_CREATE=( $SILENT_OPT \
                           ${ctx:+--xid "$ctx"} )
     ## put '--secure' at front so that it can be overridden
-    OPTS_VATTRIBUTE=( --secure "${OPTS_VATTRIBUTE[@]}" )
+    OPTS_VATTRIBUTE=( --secure --flag default "${OPTS_VATTRIBUTE[@]}" )
 }
 
 function _generateScheduleOptions
@@ -808,27 +808,40 @@ function initWait
        local _is_tmpdir
        _is_tmpdir=$($_MKTEMPDIR /tmp/vwaitstat.XXXXXX)
 
-       $_NOHUP $_VWAIT --timeout "$VSHELPER_SYNC_TIMEOUT" \
-           --status-fd 3 "$2"  \
-           >>$_is_tmpdir/out 2>$_is_tmpdir/err 3>$_is_tmpdir/fifo &
+       (
+           $_VWAIT --timeout "$VSHELPER_SYNC_TIMEOUT" \
+               --status-fd 3 "$2" \
+               >>$_is_tmpdir/out 2>$_is_tmpdir/err 3>$_is_tmpdir/fifo
+           rc=$?
 
+           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
+
+           exit $rc
+       ) 4>$_is_tmpdir/procs &
+           
        echo "$!" >$_is_tmpdir/pid
        eval "$3"=$_is_tmpdir
-    fi
+    fi </dev/null
 }
 
 
-## Usage: _waitForVWait <vserver> <fifo> <pid>
+## Usage: _waitForVWait <vserver> <fifo> <pid> <procs>
 function _waitForVWait
 {
-    declare -a status
     wait "$3" || :
+
+    declare -a status
+    declare -r procs=$(cat $4)
+
     getFileArray status "$2"
     set -- ${status[0]}
 
-    case "$2" in
+    case "$1" in
        (ERROR)         warning $"\
-'vwait' exited with error '$3' which indicates that vserver could not
+'vwait' exited with error '$2' which indicates that vserver could not
 be stopped properly"
                        ;;
        (FINISHED)      ;;
@@ -838,15 +851,14 @@ killed by sending a SIGKILL signal. Please investigate the reasons
 and/or increase the timeout in apps/vshelper/sync-timeout."
                        ;;
 
-       (TIMEOUT)       local procs=$($_VPS axf | $_EGREP -e "^[^ \t]+[ \t]+$S_CONTEXT[ \t]+")
-                       warning $"\
+       (TIMEOUT)       warning $"\
 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
-"
-                       killContext "$S_CONTEXT" 9
+----------------------------------------------------------------------
+${procs:+$procs
+}----------------------------------------------------------------------"
                        ;;
 
        (\?\?\?|*)      warning $"\
@@ -867,7 +879,7 @@ function waitForSync
     local vwait_pid=$4
 
     if test -d "$vwait_statdir"; then
-       _waitForVWait "$cfgdir" "$vwait_statdir/fifo" "$( <$vwait_statdir/pid )"
+       _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 $"\