summaryrefslogtreecommitdiff
path: root/plugins/mms
diff options
context:
space:
mode:
authorGravatar waker <wakeroid@gmail.com>2012-10-01 22:46:19 +0200
committerGravatar waker <wakeroid@gmail.com>2012-10-01 22:46:19 +0200
commit4187edea48cb3163c7341849166be9a5c9f50faa (patch)
treef63815f8a95904b190a120deb85f4638fb1ae09e /plugins/mms
parent3aaf888bfd21412425d9dbf900a72f0e6ca26b89 (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.c4
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 */