X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fnetwork%2Fpoll.c;h=575bb10745ef34c26bdd5c732bebb5c1a017da8e;hb=d8685373ac2760882f257ab58cbc8fe3c1c8df95;hp=553a7e59d72fa1a4dc8142a2d4c10b6a6993ff4e;hpb=e9c23e9505aafc374b76c840986c3fe3fb9b1cb3;p=vlc diff --git a/src/network/poll.c b/src/network/poll.c index 553a7e59d7..575bb10745 100644 --- a/src/network/poll.c +++ b/src/network/poll.c @@ -25,9 +25,44 @@ # include "config.h" #endif -#ifdef HAVE_POLL +#include #include +#include + + +#ifdef HAVE_MAEMO +# include +# include +# include + +int vlc_poll (struct pollfd *fds, unsigned nfds, int timeout) +{ + struct timespec tsbuf, *ts; + sigset_t set; + int canc, ret; + + if (timeout != -1) + { + div_t d = div (timeout, 1000); + tsbuf.tv_sec = d.quot; + tsbuf.tv_nsec = d.rem * 1000000; + ts = &tsbuf; + } + else + ts = NULL; + + pthread_sigmask (SIG_BLOCK, NULL, &set); + sigdelset (&set, SIGRTMIN); + + canc = vlc_savecancel (); + ret = ppoll (fds, nfds, ts, &set); + vlc_restorecancel (canc); + vlc_testcancel (); + return ret; +} + +#elif defined (HAVE_POLL) struct pollfd; int vlc_poll (struct pollfd *fds, unsigned nfds, int timeout) @@ -37,16 +72,17 @@ int vlc_poll (struct pollfd *fds, unsigned nfds, int timeout) } #else /* !HAVE_POLL */ -#include #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); @@ -87,13 +123,10 @@ int vlc_poll (struct pollfd *fds, unsigned nfds, int timeout) #ifndef HAVE_ALERTABLE_SELECT # warning FIXME! Fix cancellation and remove this crap. -resume: - vlc_testcancel (); - if ((timeout < 0) || (timeout > 50)) { tv.tv_sec = 0; - tv.tv_usec = 50; + tv.tv_usec = 50000; } else #endif @@ -105,10 +138,9 @@ resume: } val = select (val + 1, &rdset, &wrset, &exset, - (timeout >= 0) ? &tv : NULL); + /*(timeout >= 0) ?*/ &tv /*: NULL*/); #ifndef HAVE_ALERTABLE_SELECT -# warning FIXME! Fix cancellation and remove this crap. if (val == 0) { if (timeout > 0)