diff --git a/apps/app_mp3.c b/apps/app_mp3.c index b2bddb7fd6..791840106d 100755 --- a/apps/app_mp3.c +++ b/apps/app_mp3.c @@ -68,6 +68,22 @@ static int mp3play(char *filename, int fd) return -1; } +static int timed_read(int fd, void *data, int datalen) +{ + int res; + fd_set fds; + struct timeval tv = { 2, 0 }; /* Wait no more than 2 seconds */ + FD_ZERO(&fds); + FD_SET(fd, &fds); + res = select(fd + 1, &fds, NULL, NULL, &tv); + if (res < 1) { + ast_log(LOG_NOTICE, "Selected timed out/errored out with %d\n", res); + return -1; + } + return read(fd, data, datalen); + +} + static int mp3_exec(struct ast_channel *chan, void *data) { int res=0; @@ -132,7 +148,7 @@ static int mp3_exec(struct ast_channel *chan, void *data) } ast_frfree(f); } else { - res = read(fds[0], myf.frdata, sizeof(myf.frdata)); + res = timed_read(fds[0], myf.frdata, sizeof(myf.frdata)); if (res > 0) { myf.f.frametype = AST_FRAME_VOICE; myf.f.subclass = AST_FORMAT_SLINEAR;