mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 21:55:25 +00:00
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:
parent
4ff19ced3a
commit
34497fdb37
@ -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
|
||||||
|
@ -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--;
|
||||||
|
Loading…
Reference in New Issue
Block a user