diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index b6a5cd68a80f9f2c37e4218b75d7c8366c326ad0..23e0db0b053bd5437e0e96b4a3e77599880d56c6 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -5770,6 +5770,15 @@ qemudDomainSaveImageStartVM(virConnectPtr conn, VIR_VM_OP_RESTORE); if (intermediate_pid != -1) { + if (ret < 0) { + /* if there was an error setting up qemu, the intermediate process will + * wait forever to write to stdout, so we must manually kill it. + */ + VIR_FORCE_CLOSE(intermediatefd); + VIR_FORCE_CLOSE(fd); + kill(intermediate_pid, SIGTERM); + } + /* Wait for intermediate process to exit */ while (waitpid(intermediate_pid, &childstat, 0) == -1 && errno == EINTR) {