Package: xen-utils-common
Version: 4.1.3-4

Function check_running in /etc/init.d/xendomains incorrectly detects a not running domain as running. As a consequence thereof "/etc/init.d/xendomains stop" needs more than XENDOMAINS_STOP_MAXWAIT * "number of xen domains known to xend" seconds to run.

Here is a pseudo call trace:

do_stop_shutdown()
{
...
  while read id name rest; do
    log_action_begin_msg "Waiting for Xen domain $name ($id) to shut down"
    timeout_domain "$name" "$XENDOMAINS_STOP_MAXWAIT"
    log_action_end_msg $?
  done < <(/usr/lib/xen-common/bin/xen-init-list)
}

so timeout_domain is called with the name of the domain.

timeout_domain()
{
  name="$1"
  TIMEOUT="$2"
  for no in $(seq 0 $TIMEOUT); do
    if ! check_running "$name"; then return 0; fi
...

so check_running is also called with the name

check_running()
{
  xen domid "$1" > /dev/null 2>&1
  return $?
}

The output of "xm domid <name>" for a running domain is the ID of the domain and "None" for a known, but not runing domain. The return code for both cases is 0. So the function always returns 0. With xen 3 and no xend, this code was correct.

I suggest to parse the output of "xm list -l <name> " for  "(status 0)".

I am using Debian wheezy/sid with kernel 3.2.0-4-amd64.
xen-tool-stack is /usr/lib/xen-4.1/bin/xm


--
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to