Fix a calculation error I had made in the poll. The poll
authorMark Michelson <mmichelson@digium.com>
Thu, 7 Aug 2008 19:54:27 +0000 (19:54 +0000)
committerMark Michelson <mmichelson@digium.com>
Thu, 7 Aug 2008 19:54:27 +0000 (19:54 +0000)
would reset to 500 ms every time a non-voice frame
was received. The total time we poll should be 500 ms, so
now we save the amount of time left after the poll returned
and use that as our argument for the next call to poll

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@136633 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/channel.c

index 2ab1382..f23ccc5 100644 (file)
@@ -1679,17 +1679,20 @@ int __ast_answer(struct ast_channel *chan, unsigned int delay)
                        ast_safe_sleep(chan, delay);
                else {
                        struct ast_frame *f;
+                       int ms = ANSWER_WAIT_MS;
                        while (1) {
                                /* 500 ms was the original delay here, so now
                                 * we cap our waiting at 500 ms
                                 */
-                               res = ast_waitfor(chan, ANSWER_WAIT_MS);
-                               if (res < 0) {
+                               ms = ast_waitfor(chan, ms);
+                               if (ms < 0) {
                                        ast_log(LOG_WARNING, "Error condition occurred when polling channel %s for a voice frame: %s\n", chan->name, strerror(errno));
+                                       res = -1;
                                        break;
                                }
-                               if (res == 0) {
+                               if (ms == 0) {
                                        ast_debug(2, "Didn't receive a voice frame from %s within %d ms of answering. Continuing anyway\n", chan->name, ANSWER_WAIT_MS);
+                                       res = 0;
                                        break;
                                }
                                f = ast_read(chan);