qemu_driver: Fix another domain startup error reporting race.

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).
This commit is contained in:
Cole Robinson 2009-05-29 14:12:50 +00:00
parent 4ff19ced3a
commit 34497fdb37
2 changed files with 13 additions and 5 deletions

View File

@ -1,3 +1,8 @@
Fri May 29 10:10:00 EDT 2009 Cole Robinson <crobinso@redhat.com>
* src/qemu_driver.c: qemu_driver: Fix another domain startup error
reporting race.
Fri May 29 10:01:19 EDT 2009 Cole Robinson <crobinso@redhat.com> Fri May 29 10:01:19 EDT 2009 Cole Robinson <crobinso@redhat.com>
* src/qemu_driver.c : qemuDomainLookupByUUID: print correct UUID * src/qemu_driver.c : qemuDomainLookupByUUID: print correct UUID

View File

@ -746,17 +746,21 @@ qemudReadLogOutput(virConnectPtr conn,
const char *what, const char *what,
int timeout) int timeout)
{ {
int retries = timeout*10; int retries = (timeout*10);
int got = 0; int got = 0;
buf[0] = '\0'; buf[0] = '\0';
while (retries) { while (retries) {
ssize_t ret; ssize_t func_ret, ret;
int isdead = 0; int isdead = 0;
func_ret = func(conn, vm, buf, fd);
if (kill(vm->pid, 0) == -1 && errno == ESRCH) if (kill(vm->pid, 0) == -1 && errno == ESRCH)
isdead = 1; 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); ret = saferead(fd, buf+got, buflen-got-1);
if (ret < 0) { if (ret < 0) {
virReportSystemError(conn, errno, virReportSystemError(conn, errno,
@ -781,9 +785,8 @@ qemudReadLogOutput(virConnectPtr conn,
return -1; return -1;
} }
ret = func(conn, vm, buf, fd); if (func_ret <= 0)
if (ret <= 0) return func_ret;
return ret;
usleep(100*1000); usleep(100*1000);
retries--; retries--;