X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fnetwork%2Fpoll.c;h=cf9554a30ab687c453425985cf52f6a025b24820;hb=9fcd7b2f09163beb39d0b053fcb27a24c8784f73;hp=f6f9050effd9df1f7c1ffd4b4f2d0b293295d2de;hpb=1f8962d23d3a2e5f23d64ea931bc0dc4c0e335fd;p=vlc diff --git a/src/network/poll.c b/src/network/poll.c index f6f9050eff..cf9554a30a 100644 --- a/src/network/poll.c +++ b/src/network/poll.c @@ -26,8 +26,10 @@ #endif #include +#include #include + #ifdef HAVE_POLL struct pollfd; @@ -37,15 +39,18 @@ int vlc_poll (struct pollfd *fds, unsigned nfds, int timeout) abort (); } #else /* !HAVE_POLL */ + #include -#include -#include int vlc_poll (struct pollfd *fds, unsigned nfds, int timeout) { fd_set rdset, wrset, exset; struct timeval tv = { 0, 0 }; - int val = -1; + int val; + +resume: + val = -1; + vlc_testcancel (); FD_ZERO (&rdset); FD_ZERO (&wrset); @@ -84,6 +89,15 @@ int vlc_poll (struct pollfd *fds, unsigned nfds, int timeout) FD_SET (fd, &exset); } +#ifndef HAVE_ALERTABLE_SELECT +# warning FIXME! Fix cancellation and remove this crap. + if ((timeout < 0) || (timeout > 50)) + { + tv.tv_sec = 0; + tv.tv_usec = 50000; + } + else +#endif if (timeout >= 0) { div_t d = div (timeout, 1000); @@ -92,7 +106,18 @@ int vlc_poll (struct pollfd *fds, unsigned nfds, int timeout) } val = select (val + 1, &rdset, &wrset, &exset, - (timeout >= 0) ? &tv : NULL); + /*(timeout >= 0) ?*/ &tv /*: NULL*/); + +#ifndef HAVE_ALERTABLE_SELECT + if (val == 0) + { + if (timeout > 0) + timeout -= (timeout > 50) ? 50 : timeout; + if (timeout != 0) + goto resume; + } +#endif + if (val == -1) return -1;