[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [libvirt] [PATCH] qemu_driver: Fix another domain startup error reporting race.



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


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]