summaryrefslogtreecommitdiff
path: root/channels/sig_pri.c
diff options
context:
space:
mode:
Diffstat (limited to 'channels/sig_pri.c')
-rw-r--r--channels/sig_pri.c12
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);