udp: use non-blocking read instead of select.
authorNicolas George <nicolas.george@normalesup.org>
Thu, 15 Mar 2012 12:07:10 +0000 (13:07 +0100)
committerNicolas George <nicolas.george@normalesup.org>
Thu, 22 Mar 2012 16:36:23 +0000 (17:36 +0100)
libavformat/udp.c

index 0a831e8..dad79ff 100644 (file)
@@ -327,33 +327,14 @@ static void *circular_buffer_task( void *_URLContext)
 {
     URLContext *h = _URLContext;
     UDPContext *s = h->priv_data;
-    fd_set rfds;
-    struct timeval tv;
     int old_cancelstate;
 
     pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &old_cancelstate);
+    ff_socket_nonblock(s->udp_fd, 0);
     while(1) {
         int left;
-        int ret;
         int len;
 
-        FD_ZERO(&rfds);
-        FD_SET(s->udp_fd, &rfds);
-        tv.tv_sec = 1;
-        tv.tv_usec = 0;
-        pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &old_cancelstate);
-        ret = select(s->udp_fd + 1, &rfds, NULL, NULL, &tv);
-        pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &old_cancelstate);
-        if (ret < 0) {
-            if (ff_neterrno() == AVERROR(EINTR))
-                continue;
-            s->circular_buffer_error = AVERROR(EIO);
-            goto end;
-        }
-
-        if (!(ret > 0 && FD_ISSET(s->udp_fd, &rfds)))
-            continue;
-
         /* How much do we have left to the end of the buffer */
         /* Whats the minimum we can read so that we dont comletely fill the buffer */
         left = av_fifo_space(s->fifo);