--- include/asterisk/channel.h.orig Thu Dec 4 13:32:17 2003 +++ include/asterisk/channel.h Mon Dec 8 17:37:18 2003 @@ -20,6 +20,7 @@ #include #include #include +#include #if defined(__cplusplus) || defined(c_plusplus) extern "C" { @@ -757,13 +758,22 @@ #ifdef __linux__ return select(nfds, rfds, wfds, efds, tvp); #else + int res; + if (tvp) { struct timeval tv, tvstart, tvend, tvlen; - int res; tv = *tvp; gettimeofday(&tvstart, NULL); - res = select(nfds, rfds, wfds, efds, tvp); + + for (;;) { + res = select(nfds, rfds, wfds, efds, tvp); + if ((res < 0) && (errno == EINTR)) + continue; + else + break; + } + gettimeofday(&tvend, NULL); timersub(&tvend, &tvstart, &tvlen); timersub(&tv, &tvlen, tvp); @@ -772,9 +782,16 @@ tvp->tv_usec = 0; } return res; - } - else + } else { + for (;;) { + res = select(nfds, rfds, wfds, efds, NULL); + if ((res < 0) && (errno == EINTR)) + continue; + else + break; + } return select(nfds, rfds, wfds, efds, NULL); + } #endif }