diff options
Diffstat (limited to 'channels/sig_pri.c')
-rw-r--r-- | channels/sig_pri.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/channels/sig_pri.c b/channels/sig_pri.c index 93a77efd7..e01ceadd3 100644 --- a/channels/sig_pri.c +++ b/channels/sig_pri.c @@ -1881,7 +1881,9 @@ static void *do_idle_thread(void *v_pvt) struct ast_frame *f; char ex[80]; /* Wait up to 30 seconds for an answer */ - int newms, ms = 30000; + int timeout_ms = 30000; + int ms; + struct timeval start; struct ast_callid *callid; if ((callid = ast_channel_callid(chan))) { @@ -1896,7 +1898,12 @@ static void *do_idle_thread(void *v_pvt) ast_hangup(chan); return NULL; } - while ((newms = ast_waitfor(chan, ms)) > 0) { + start = ast_tvnow(); + while ((ms = ast_remaining_ms(start, timeout_ms))) { + if (ast_waitfor(chan, ms) <= 0) { + break; + } + f = ast_read(chan); if (!f) { /* Got hangup */ @@ -1922,7 +1929,6 @@ static void *do_idle_thread(void *v_pvt) }; } ast_frfree(f); - ms = newms; } /* Hangup the channel since nothing happend */ ast_hangup(chan); |