More select/poll updates for various applications
authorMark Spencer <markster@digium.com>
Mon, 26 Apr 2004 03:02:49 +0000 (03:02 +0000)
committerMark Spencer <markster@digium.com>
Mon, 26 Apr 2004 03:02:49 +0000 (03:02 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@2762 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_mp3.c
apps/app_nbscat.c
asterisk.c
channel.c
pbx.c
pbx/pbx_wilcalu.c

index aee0479..7432d90 100755 (executable)
@@ -84,11 +84,10 @@ static int mp3play(char *filename, int fd)
 static int timed_read(int fd, void *data, int datalen)
 {
        int res;
-       fd_set fds;
-       struct timeval tv = { 2, 0 };           /* Wait no more than 2 seconds */
-       FD_ZERO(&fds);
-       FD_SET(fd, &fds);
-       res = ast_select(fd + 1, &fds, NULL, NULL, &tv);
+       struct pollfd fds[1];
+       fds[0].fd = fd;
+       fds[0].events = POLLIN;
+       res = poll(fds, 1, 2000);
        if (res < 1) {
                ast_log(LOG_NOTICE, "Selected timed out/errored out with %d\n", res);
                return -1;
@@ -146,7 +145,7 @@ static int mp3_exec(struct ast_channel *chan, void *data)
                                res = -1;
                                break;
                        }
-                       if (ms) {
+                       if (ms > 40) {
                                f = ast_read(chan);
                                if (!f) {
                                        ast_log(LOG_DEBUG, "Null frame == hangup() detected\n");
@@ -161,6 +160,15 @@ static int mp3_exec(struct ast_channel *chan, void *data)
                                }
                                ast_frfree(f);
                        } else  {
+#if 0
+                               {
+                                       static struct timeval last;
+                                       struct timeval tv;
+                                       gettimeofday(&tv, NULL);
+                                       printf("Since last: %ld\n", (tv.tv_sec - last.tv_sec) * 1000 + (tv.tv_usec - last.tv_usec) / 1000);
+                                       last = tv;
+                               }
+#endif
                                res = timed_read(fds[0], myf.frdata, sizeof(myf.frdata));
                                if (res > 0) {
                                        myf.f.frametype = AST_FRAME_VOICE;
@@ -182,7 +190,10 @@ static int mp3_exec(struct ast_channel *chan, void *data)
                                        res = 0;
                                        break;
                                }
-                               ms = res / 16;
+                               ms += res / 16;
+#if 0
+                               printf("Next: %d\n", ms);
+#endif                         
                        }
                }
        }
index ed5116d..d1b8368 100755 (executable)
@@ -1,7 +1,7 @@
 /*
  * Asterisk -- A telephony toolkit for Linux.
  *
- * Silly application to play an NBScat file -- uses mpg123
+ * Silly application to play an NBScat file -- uses nbscat8k
  * 
  * Copyright (C) 1999, Mark Spencer
  *
@@ -71,11 +71,10 @@ static int NBScatplay(int fd)
 static int timed_read(int fd, void *data, int datalen)
 {
        int res;
-       fd_set fds;
-       struct timeval tv = { 2, 0 };           /* Wait no more than 2 seconds */
-       FD_ZERO(&fds);
-       FD_SET(fd, &fds);
-       res = ast_select(fd + 1, &fds, NULL, NULL, &tv);
+       struct pollfd fds[1];
+       fds[0].fd = fd;
+       fds[0].events = POLLIN;
+       res = poll(fds, 1, 2000);
        if (res < 1) {
                ast_log(LOG_NOTICE, "Selected timed out/errored out with %d\n", res);
                return -1;
@@ -129,7 +128,7 @@ static int NBScat_exec(struct ast_channel *chan, void *data)
                                res = -1;
                                break;
                        }
-                       if (ms) {
+                       if (ms > 40) {
                                f = ast_read(chan);
                                if (!f) {
                                        ast_log(LOG_DEBUG, "Null frame == hangup() detected\n");
@@ -165,7 +164,7 @@ static int NBScat_exec(struct ast_channel *chan, void *data)
                                        res = 0;
                                        break;
                                }
-                               ms = res / 16;
+                               ms += res / 16;
                        }
                }
        }
index 6566bb7..56dcc0d 100755 (executable)
@@ -40,7 +40,6 @@
 #include <asterisk/lock.h>
 #include <sys/socket.h>
 #include <sys/un.h>
-#include <sys/select.h>
 #include <sys/wait.h>
 #include <string.h>
 #include <errno.h>
index 38462ce..91b81b9 100755 (executable)
--- a/channel.c
+++ b/channel.c
@@ -594,7 +594,7 @@ int ast_softhangup_nolock(struct ast_channel *chan, int cause)
        /* Inform channel driver that we need to be hung up, if it cares */
        chan->_softhangup |= cause;
        ast_queue_frame(chan, &f);
-       /* Interrupt any select call or such */
+       /* Interrupt any poll call or such */
        if (chan->blocking)
                pthread_kill(chan->blocker, SIGURG);
        return res;
diff --git a/pbx.c b/pbx.c
index abc1de1..01aa0f6 100755 (executable)
--- a/pbx.c
+++ b/pbx.c
@@ -305,7 +305,7 @@ static struct pbx_builtin {
        { "SetLanguage", pbx_builtin_setlanguage,
 "Sets user language",
 "  SetLanguage(language):  Set  the  channel  language to 'language'.  This\n"
-"information is used for the generation of numbers, and to select a natural\n"
+"information is used for the generation of numbers, and to choose a natural\n"
 "language file when available.  For example, if language is set to 'fr' and\n"
 "the file 'demo-congrats' is requested  to  be  played,  if the file 'fr/demo-\n"
 "congrats' exists, then it will play that file, and if not will play the\n"
index 9fdf642..69578c8 100755 (executable)
@@ -61,7 +61,7 @@ static void *autodial(void *ignore)
        char * sendbufptr=sendbuf;
        int fd=open(dialfile,O_RDONLY|O_NONBLOCK);
        int flags = fcntl(fd, F_GETFL);
-       fd_set fds;
+       struct pollfd fds[1];
        fcntl(fd, F_SETFL, flags & ~O_NONBLOCK);
        if (option_debug)
                ast_log(LOG_DEBUG, "Entered Wil-Calu fd=%d\n",fd);
@@ -77,9 +77,9 @@ static void *autodial(void *ignore)
                void *pass;
 
                memset(buf,0,257);
-               FD_ZERO(&fds);
-               FD_SET(fd, &fds);
-               ast_select(fd + 1, &fds, NULL, NULL, NULL);
+               fds[0].fd = fd;
+               fds[0].events = POLLIN;
+               poll(fds, 1, -1);
                bytes=read(fd,buf,256);
                buf[(int)bytes]=0;