mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 02:30:03 +01:00
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:
1 parent
0a38a347b7
commit
24a6ed484b
1 file changed
+3
-4
@@ -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:
|
||||
|
||||