-# $Id: vserver.stop,v 1.29 2005/06/30 06:17:58 ensc Exp $ --*- sh -*--
+# $Id: vserver.stop 2508 2007-02-25 14:06:51Z dhozac $ --*- sh -*--
# Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
#
initWait "$VSERVER_DIR" "$S_CONTEXT" vwait_statdir
if test -n "$_IS_FAKEINIT" && \
$_VSERVER_INFO - FEATURE vkill; then
- $_VKILL -s INT --xid "$S_CONTEXT" -- 1 || fail=1
- ## HACK: remove the 'initpid' stuff above when PID virtualization
- ## is implemented
+ if ! vshelper.isStopSync; then
+ $_VKILL -s INT --xid "$S_CONTEXT" -- 1 || fail=1
+ fi
elif $_VSERVER_INFO - FEATURE migrate; then
"${NICE_CMD[@]}" \
- ${USE_VNAMESPACE:+$_VNAMESPACE --enter "$S_CONTEXT" -- } \
$_VCONTEXT $SILENT_OPT --migrate --chroot --xid "$S_CONTEXT" -- \
"${INITCMD_STOP[@]}" || fail=1
else
"${NICE_CMD[@]}" \
"$_CHBIND" "${CHBIND_OPTS[@]}" \
"$_EXEC_ULIMIT" "$VSERVER_DIR/ulimits" \
- ${USE_VNAMESPACE:+$_VNAMESPACE --enter "$S_CONTEXT"} \
$_CHCONTEXT_COMPAT "${CHCONTEXT_OPTS[@]}" \
"$_CAPCHROOT" "${CAPCHROOT_OPTS[@]}" "." \
"${INITCMD_STOP[@]}" || fail=1
fi
-test -n "$fail" || waitForSync "$VSERVER_DIR" "$sync_fifo" "$vwait_statdir"
+# Remove persistent so those contexts can be stopped
+$_VATTRIBUTE --set --xid "$S_CONTEXT" --flag ~persistent 2>/dev/null || :
+if $_VSERVER_INFO -q "$S_CONTEXT" XIDTYPE static &&
+ $_VSERVER_INFO - FEATURE vnet; then
+ $_NATTRIBUTE --set --nid "$S_CONTEXT" --flag ~persistent 2>/dev/null || :
+fi
+
+vshelper.doStopSync
+
+waitForSync "$VSERVER_DIR" "$sync_fifo" "$vwait_statdir"
vshelper.doDestroy "$VSERVER_DIR" "$S_CONTEXT"
sendKillSequence "$S_CONTEXT" "${INITKILL_SEQ[@]}"
umountVserver "$VSERVER_DIR" || :
disableInterfaces "$VSERVER_DIR"
+saveDiskLimits "$VSERVER_DIR"
+
execScriptlets "$VSERVER_DIR" "$VSERVER_NAME" postpost-stop
+removeCPUSET "$VSERVER_DIR"