xend: fix "xm list hangs"

If a command hold domains_lock, "xm list" would hang for waiting for
the lock. Such as creating many VMs at a script (such as 20), command
of "xm list" could hang for long time(10 mins).  I think domains_lock
here only protect update().  So, we shouldn't do update before command
of "list" really get this lock, but xm do need show the domain's
information quickly. In this patch, if command couldn't get the
domains_lock after 20 times trying, "xm list" would show the
information of VMs without update().

Signed-off-by: James Song (Wei) <jsong@novell.com>
This commit is contained in:
Keir Fraser committed 2010-06-21 09:58:17 +01:00
1 parent 0ca1bba0a6
commit df992155c8
1 file changed
+11 -4
+11 -4
View File
@@ -824,10 +824,16 @@ class XendDomain:
if type(state) == int:
state = POWER_STATE_NAMES[state]
state = state.lower()
self.domains_lock.acquire()
resu = False
count = 0
while True:
resu = self.domains_lock.acquire(0)
if resu or count < 20:
break
count += 1
try:
self._refresh(refresh_shutdown = False)
if resu:
self._refresh(refresh_shutdown = False)
# active domains
active_domains = self.domains.values()
@@ -846,7 +852,8 @@ class XendDomain:
POWER_STATE_NAMES[x._stateGet()].lower() == state,
active_domains + inactive_domains)
finally:
self.domains_lock.release()
if resu:
self.domains_lock.release()
def list_sorted(self, state = DOM_STATE_RUNNING):
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.