
On 05/28/2009 02:24 PM, Daniel P. Berrange wrote:
On Thu, May 28, 2009 at 01:16:23PM -0400, Cole Robinson wrote:
Parse the command line output a bit earlier so we have a better chance of reporting the full error output on failure.
I hit this when QEMU would try to boot an invalid kernel (virtinst bug).
Signed-off-by: Cole Robinson <crobinso@redhat.com> --- src/qemu_driver.c | 13 ++++++++----- 1 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/src/qemu_driver.c b/src/qemu_driver.c index 9bd7d03..f62a46b 100644 --- a/src/qemu_driver.c +++ b/src/qemu_driver.c @@ -746,17 +746,21 @@ qemudReadLogOutput(virConnectPtr conn, const char *what, int timeout) { - int retries = timeout*10; + int retries = (timeout*10)+1;
Seems to be magical not really related to the problem ?
Yeah, not really intended. I dropped this when I applied the patch. - Cole
int got = 0; buf[0] = '\0';
while (retries) { - ssize_t ret; + ssize_t func_ret, ret; int isdead = 0;
+ func_ret = func(conn, vm, buf, fd); + if (kill(vm->pid, 0) == -1 && errno == ESRCH) isdead = 1;
+ /* Any failures should be detected before we read the log, so we + * always have something useful to report on failure. */ ret = saferead(fd, buf+got, buflen-got-1); if (ret < 0) { virReportSystemError(conn, errno, @@ -781,9 +785,8 @@ qemudReadLogOutput(virConnectPtr conn, return -1; }
- ret = func(conn, vm, buf, fd); - if (ret <= 0) - return ret; + if (func_ret <= 0) + return func_ret;
usleep(100*1000); retries--; --
ACK
Daniel