[FFmpeg-devel] [PATCH] aviobuf: Retry if the read/write function returns AVERROR(EAGAIN)

Martin Storsjö martin
Fri Jan 7 14:00:54 CET 2011

On Fri, 7 Jan 2011, Michael Niedermayer wrote:

> > As for whether they are allowed to return EAGAIN - url_read_complete
> > already handles EAGAIN, so url_read seems to be allowed to return it, 
> > which ByteIOContext uses directly at the moment.
> > Not sure if write_packet
> > is allowed to return it though - url_write hides it at least.
> If none of the current protocols can generate EAGAIN on write_packet() then
> we could just disallow it for future protocols to do it
> If some of the current protocols can generate EAGAIN on write_packet() then we
> need to handle this somewhere, either in the protocols or the callers. Where
> its easier depends probably on how many protocols are affected and if the
> code could benefit from being protocol specific

I assume this (and/or the paragraph above) refers to read_packet(), since 
it's more of an issue there than in write_packet() I think.

I'm not sure if any of the current protocols do return it - I was about to 
add a codepath where it would be returned, triggering me to write this 
patch, but I managed to avoid that particular case.

> We also could change the API to use 2 size parameters.
> One that specifies the minimum that we need and one the maximum we could accept
> then all the retry code could be put inside protocols and still allow flexible
> blocking and non blocking reads. It of course doesnt really avoid the retry
> need but it might simplify API by reducing the duplication of complete and non
> complete IO functions

Perhaps, although the current API is quite acceptable I think.

> In the end i dont know what is best, i know though what is worst and that is
> leaving it buggy ...


Another way of solving it is as in attached. This has much less code 
duplication, but adds a new public function instead.

// Martin
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-libavformat-Add-a-new-function-url_read_retry.patch
Type: text/x-diff
Size: 3231 bytes
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20110107/a02028fe/attachment.patch>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0002-aviobuf-Use-url_read_retry-in-url_fdopen.patch
Type: text/x-diff
Size: 988 bytes
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20110107/a02028fe/attachment-0001.patch>

More information about the ffmpeg-devel mailing list