mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-26 19:01:44 +02:00
Make url_read_complete handle EAGAIN more intelligently.
Only retry 2 - 5 times in quick succession and afterwards sleep a bit to avoid creating high CPU load without any progress. Originally committed as revision 21427 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
0b882b4009
commit
f1d2b5728c
@ -19,6 +19,9 @@
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
/* needed for usleep() */
|
||||
#define _XOPEN_SOURCE 600
|
||||
#include <unistd.h>
|
||||
#include "libavutil/avstring.h"
|
||||
#include "libavcodec/opt.h"
|
||||
#include "os_support.h"
|
||||
@ -152,14 +155,21 @@ int url_read(URLContext *h, unsigned char *buf, int size)
|
||||
int url_read_complete(URLContext *h, unsigned char *buf, int size)
|
||||
{
|
||||
int ret, len;
|
||||
int fast_retries = 5;
|
||||
|
||||
len = 0;
|
||||
while (len < size) {
|
||||
ret = url_read(h, buf+len, size-len);
|
||||
if (ret == AVERROR(EAGAIN)) {
|
||||
ret = 0;
|
||||
if (fast_retries)
|
||||
fast_retries--;
|
||||
else
|
||||
usleep(1000);
|
||||
} else if (ret < 1)
|
||||
return ret < 0 ? ret : len;
|
||||
if (ret)
|
||||
fast_retries = FFMAX(fast_retries, 2);
|
||||
len += ret;
|
||||
}
|
||||
return len;
|
||||
|
Loading…
Reference in New Issue
Block a user