--- channel.c 2005-10-18 12:40:52.000000000 -0400 +++ channel.c 2005-10-18 12:41:02.000000000 -0400 @@ -1254,7 +1254,7 @@ struct timeval start = { 0 , 0 }; struct pollfd *pfds; int res; - long rms; + long rms, kbrms; int x, y, max; int spoint; time_t now = 0; @@ -1325,7 +1325,20 @@ } if (*ms > 0) start = ast_tvnow(); - res = poll(pfds, max, rms); + if (rms > 600000) + kbrms = 600000; + else + kbrms = rms; + res = poll(pfds, max, kbrms); + while (res == 0 && kbrms != rms) + { + rms -= kbrms; + if (rms > 600000) + kbrms = 600000; + else + kbrms = rms; + res = poll(pfds, max, kbrms); + } if (res < 0) { for (x=0; x < n; x++) ast_clear_flag(c[x], AST_FLAG_BLOCKING);