Don't ask me why, but waitfordigit will immediately return a 1 on my system, unless...
authorSteve Murphy <murf@digium.com>
Tue, 14 Aug 2007 13:46:58 +0000 (13:46 +0000)
committerSteve Murphy <murf@digium.com>
Tue, 14 Aug 2007 13:46:58 +0000 (13:46 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@79378 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_zap.c
main/channel.c

index e4304a5..35be3ec 100644 (file)
@@ -6079,6 +6079,7 @@ static void *ss_thread(void *data)
                                ast_hangup(chan);
                                return NULL;
                        } else if (res)  {
+                               ast_debug(1,"waitfordigit returned '%c' (%d), timeout = %d\n", res, res, timeout);
                                exten[len++]=res;
                                exten[len] = '\0';
                        }
index 51b5da9..3ddda15 100644 (file)
@@ -1991,12 +1991,14 @@ int ast_waitfordigit_full(struct ast_channel *c, int ms, int audiofd, int cmdfd)
        if (ast_test_flag(c, AST_FLAG_ZOMBIE) || ast_check_hangup(c))
                return -1;
        /* Wait for a digit, no more than ms milliseconds total. */
+       
        while (ms) {
                struct ast_channel *rchan;
-               int outfd;
+               int outfd=-1;
 
                errno = 0;
                rchan = ast_waitfor_nandfds(&c, 1, &cmdfd, (cmdfd > -1) ? 1 : 0, NULL, &outfd, &ms);
+               
                if (!rchan && outfd < 0 && ms) {
                        if (errno == 0 || errno == EINTR)
                                continue;
@@ -2004,6 +2006,7 @@ int ast_waitfordigit_full(struct ast_channel *c, int ms, int audiofd, int cmdfd)
                        return -1;
                } else if (outfd > -1) {
                        /* The FD we were watching has something waiting */
+                       ast_log(LOG_WARNING, "The FD we were waiting for has something waiting. Waitfordigit returning numeric 1\n");
                        return 1;
                } else if (rchan) {
                        int res;