qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] Re: [PATCH v7 3/6] char: Let writers know how much data was


From: Amit Shah
Subject: [Qemu-devel] Re: [PATCH v7 3/6] char: Let writers know how much data was written in case of errors
Date: Wed, 5 May 2010 18:53:47 +0530
User-agent: Mutt/1.5.19 (2009-01-05)

On (Wed) May 05 2010 [08:15:19], Anthony Liguori wrote:
> On 05/04/2010 04:39 PM, Amit Shah wrote:
>> On writing errors, we just returned -1 even if some bytes were already
>> written out. Ensure we return the number of bytes written before we
>> return the error (on a subsequent call to qemu_chr_write()).
>>
>> Signed-off-by: Amit Shah<address@hidden>
>> ---
>>   qemu-char.c |   12 +++++++++++-
>>   1 files changed, 11 insertions(+), 1 deletions(-)
>>
>> diff --git a/qemu-char.c b/qemu-char.c
>> index 76ad12c..decf687 100644
>> --- a/qemu-char.c
>> +++ b/qemu-char.c
>> @@ -507,6 +507,9 @@ int send_all(int fd, const void *buf, int len1)
>>       while (len>  0) {
>>           ret = send(fd, buf, len, 0);
>>           if (ret<  0) {
>> +            if (len1 - len) {
>> +                return len1 - len;
>> +            }
>>               errno = WSAGetLastError();
>>               if (errno != WSAEWOULDBLOCK) {
>>                   return -1;
>> @@ -531,8 +534,15 @@ static int unix_write(int fd, const uint8_t *buf, int 
>> len1)
>>       while (len>  0) {
>>           ret = write(fd, buf, len);
>>           if (ret<  0) {
>> -            if (errno != EINTR&&  errno != EAGAIN)
>> +            if (errno == EINTR) {
>> +                continue;
>> +            }
>> +            if (len1 - len) {
>> +                return len1 - len;
>> +            }
>> +            if (errno != EAGAIN) {
>>                   return -1;
>> +            }
>>           } else if (ret == 0) {
>>               break;
>>           } else {
>>    
>
> This will break lots of things.  The contract for send_all and  
> unix_write is that the transmit all data.

The current behaviour remains unchanged for all the users. Only callers
of qemu_chr_write_nb() will get an -EAGAIN return.

                Amit




reply via email to

[Prev in Thread] Current Thread [Next in Thread]