[libvirt] [PATCH] qemu_driver: Fix another domain startup error reporting race.
Cole Robinson
crobinso at redhat.com
Fri May 29 14:33:12 UTC 2009
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 at 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
More information about the libvir-list
mailing list