qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 03/20] char: add IOWatchPoll support


From: Anthony Liguori
Subject: Re: [Qemu-devel] [PATCH 03/20] char: add IOWatchPoll support
Date: Fri, 29 Mar 2013 07:24:07 -0500
User-agent: Notmuch/0.13.2+93~ged93d79 (http://notmuchmail.org) Emacs/23.3.1 (x86_64-pc-linux-gnu)

Amit Shah <address@hidden> writes:

> On (Tue) 05 Mar 2013 [23:21:18], Amit Shah wrote:
>> From: Anthony Liguori <address@hidden>
>> 
>> This is a special GSource that supports CharDriverState style
>> poll callbacks.
>> 
>> For reviewability and bisectability, this code is #if 0'd out in this
>> patch to avoid unused warnings since all of the functions are static.
>> 
>> Signed-off-by: Anthony Liguori <address@hidden>
>> Signed-off-by: Amit Shah <address@hidden>
>
>
>> +static int io_channel_send_all(GIOChannel *fd, const void *_buf, int len1)
>> +{
>> +    GIOStatus status;
>> +    gsize bytes_written;
>> +    int len;
>> +    const uint8_t *buf = _buf;
>> +
>> +    len = len1;
>> +    while (len > 0) {
>> +        status = g_io_channel_write_chars(fd, (const gchar *)buf, len,
>> +                                          &bytes_written, NULL);
>> +        if (status != G_IO_STATUS_NORMAL) {
>> +            if (status != G_IO_STATUS_AGAIN) {
>> +                return -1;
>> +            }
>
> It's not quite right to return -1 here; previous iterations of the
> while loop could have successfully written data, and (len1 - len)
> could be +ve.

Once -1 is returned, it's a terminal error.  It doesn't matter that we
may have written some data.

Regards,

Anthony Liguori

>
> How to approach this?  Convert all callers of qemu_chr_fe_write() to
> also pass a bytes_written param to handle this case?
>
>> +        } else if (status == G_IO_STATUS_EOF) {
>> +            break;
>> +        } else {
>> +            buf += bytes_written;
>> +            len -= bytes_written;
>> +        }
>> +    }
>> +    return len1 - len;
>> +}
>> +#endif
>> +
>>  typedef struct {
>>      int fd_in, fd_out;
>>      int max_size;
>
>               Amit



reply via email to

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