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(a)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