From mboxrd@z Thu Jan 1 00:00:00 1970 From: Max Zhen Subject: [PATCH] fix race condition between xenconsoled and the removal of the entry of a dying domU from xenstore Date: Fri, 01 Sep 2006 23:20:20 +0800 Message-ID: <44F84FB4.5020305@Sun.COM> Mime-Version: 1.0 Content-Type: text/plain; charset=gb2312 Content-Transfer-Encoding: 7BIT Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com Cc: Max Zhen List-Id: xen-devel@lists.xenproject.org # HG changeset patch # User cz147101@xenbld.sfbay.sun.com # Node ID db465ecb164e6d89290ae3d4fcc029e29305ae7d # Parent c682ae7a17224dc5576ba3c5db47766b2a7dc159 Shouldn't call domain_create_ring() for a domU which is shutting down. There is a race condition between domain_create_ring() and the removal of the do mU entry from xenstore. If the removal of the domU entry from xenstore comes lat er than the first xs_gather() call in domain_create_ring(), it will go on and bi nd the evtchn port to the dying domU, which will cause below error message: (XEN) (file=event_channel.c, line=144) EVTCHNOP failure: domain 0, error -22, li ne 144 Signed-off-by: Max Zhen diff -r c682ae7a1722 -r db465ecb164e tools/console/daemon/io.c --- a/tools/console/daemon/io.c Fri Sep 01 12:16:21 2006 +0100 +++ b/tools/console/daemon/io.c Fri Sep 01 08:14:07 2006 -0700 @@ -293,12 +293,14 @@ static bool watch_domain(struct domain * bool success; sprintf(domid_str, "dom%u", dom->domid); - if (watch) + if (watch) { success = xs_watch(xs, dom->conspath, domid_str); - else + if (success) + domain_create_ring(dom); + } else { success = xs_unwatch(xs, dom->conspath, domid_str); - if (success) - domain_create_ring(dom); + } + return success; }