Improve XendCheckpoint's forkHelper error handling.

When inputHandler raises an exception, close stdin and stdout in the
child before attempting to close stderr, which is held open by a
separate thread. Without this patch, exceptions raised by device
migration caused xend to hang on child.childerr.close().

Signed-off-by: Brendan Cully <brendan@cs.ubc.ca>
This commit is contained in:
Brendan Cully committed 2006-12-13 17:45:50 -08:00
1 parent 0a38a347b7
commit 24a6ed484b
1 file changed
+3 -4
+3 -4
View File
@@ -218,18 +218,17 @@ def forkHelper(cmd, fd, inputHandler, closeToChild):
log.debug('%s', line)
inputHandler(line, child.tochild)
thread.join()
except IOError, exn:
raise XendError('Error reading from child process for %s: %s' %
(cmd, exn))
finally:
child.fromchild.close()
child.childerr.close()
if not closeToChild:
child.tochild.close()
thread.join()
child.childerr.close()
status = child.wait()
status = child.wait()
if status >> 8 == 127:
raise XendError("%s failed: popen failed" % string.join(cmd))
elif status != 0:
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.