if $_VSERVER_INFO - FEATURE vwait; then
local _is_tmpdir
_is_tmpdir=$($_MKTEMPDIR /tmp/vwaitstat.XXXXXX)
-
+
$_NOHUP $_VWAIT --timeout "$VSHELPER_SYNC_TIMEOUT" \
- --terminate --status-fd 3 "$2" \
+ --status-fd 3 "$2" \
>>$_is_tmpdir/out 2>$_is_tmpdir/err 3>$_is_tmpdir/fifo &
echo "$!" >$_is_tmpdir/pid
}
-## Usage: _waitForVWait <fifo> <pid>
+## Usage: _waitForVWait <vserver> <fifo> <pid>
function _waitForVWait
{
declare -a status
- wait "$2" || :
- getFileArray status "$1"
+ wait "$3" || :
+ getFileArray status "$2"
set -- ${status[0]}
- case "$1" in
+ case "$2" in
(ERROR) warning $"\
-'vwait' exited with error '$2' which indicates that vserver could not
+'vwait' exited with error '$3' which indicates that vserver could not
be stopped properly"
;;
(FINISHED) ;;
killed by sending a SIGKILL signal. Please investigate the reasons
and/or increase the timeout in apps/vshelper/sync-timeout."
;;
- (TIMEOUT|\?\?\?|*) warning $"\
+
+ (TIMEOUT) local procs=$($_VPS axf | $_EGREP -e "^[^ \t]+[ \t]+$S_CONTEXT[ \t]+")
+ 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
+ ;;
+
+ (\?\?\?|*) warning $"\
internal error: 'vwait' exited with an unexpected status '$1'; I will
try to continue but be prepared for unexpected events."
- ;;
+ ;;
esac
return 0
local vwait_pid=$4
if test -d "$vwait_statdir"; then
- _waitForVWait "$vwait_statdir/fifo" "$( <$vwait_statdir/pid )"
+ _waitForVWait "$cfgdir" "$vwait_statdir/fifo" "$( <$vwait_statdir/pid )"
elif test -n "$_NEED_VSHELPER_SYNC"; then
$_VSHELPER_SYNC "$fifo" "$VSHELPER_SYNC_TIMEOUT" || \
warning $"\