diff options
author | waker <wakeroid@gmail.com> | 2012-10-01 22:46:19 +0200 |
---|---|---|
committer | waker <wakeroid@gmail.com> | 2012-10-01 22:46:19 +0200 |
commit | 4187edea48cb3163c7341849166be9a5c9f50faa (patch) | |
tree | f63815f8a95904b190a120deb85f4638fb1ae09e /plugins/mms | |
parent | 3aaf888bfd21412425d9dbf900a72f0e6ca26b89 (diff) |
libmms: prevent infinite loop when server returns EAGAIN, by limiting number of retries
Diffstat (limited to 'plugins/mms')
-rw-r--r-- | plugins/mms/libmms/mms.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/plugins/mms/libmms/mms.c b/plugins/mms/libmms/mms.c index 222a82b9..8ffccc79 100644 --- a/plugins/mms/libmms/mms.c +++ b/plugins/mms/libmms/mms.c @@ -159,7 +159,8 @@ static off_t fallback_io_read(void *data, int socket, char *buf, off_t num) off_t len = 0, ret; /* lprintf("%d\n", fallback_io_select(data, socket, MMS_IO_READ_READY, 1000)); */ errno = 0; - while (len < num) + int nretry = 5; + while (len < num && nretry > 0) { ret = (off_t)read(socket, buf + len, num - len); if(ret == 0) @@ -170,6 +171,7 @@ static off_t fallback_io_read(void *data, int socket, char *buf, off_t num) switch(errno) { case EAGAIN: + nretry--; continue; default: /* if already read something, return it, we will fail next time */ |