diff options
Diffstat (limited to 'source3/lib/system.c')
-rw-r--r-- | source3/lib/system.c | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/source3/lib/system.c b/source3/lib/system.c index 2a99ae779e..46b01b747a 100644 --- a/source3/lib/system.c +++ b/source3/lib/system.c @@ -112,9 +112,7 @@ int sys_select(int maxfd, fd_set *fds,struct timeval *tval) timeout = (tval != NULL) ? (tval->tv_sec * 1000) + (tval->tv_usec/1000) : -1; errno = 0; - do { - pollrtn = poll( &pfd[0], maxpoll, timeout); - } while (pollrtn<0 && errno == EINTR); + pollrtn = poll( &pfd[0], maxpoll, timeout); FD_ZERO(fds); @@ -128,11 +126,9 @@ int sys_select(int maxfd, fd_set *fds,struct timeval *tval) struct timeval t2; int selrtn; - do { - if (tval) memcpy((void *)&t2,(void *)tval,sizeof(t2)); - errno = 0; - selrtn = select(maxfd,SELECT_CAST fds,NULL,NULL,tval?&t2:NULL); - } while (selrtn<0 && errno == EINTR); + if (tval) memcpy((void *)&t2,(void *)tval,sizeof(t2)); + errno = 0; + selrtn = select(maxfd,SELECT_CAST fds,NULL,NULL,tval?&t2:NULL); return(selrtn); } @@ -140,6 +136,20 @@ int sys_select(int maxfd, fd_set *fds,struct timeval *tval) #endif /* NO_SELECT */ /******************************************************************* +similar to sys_select() but catch EINTR and continue +this is what sys_select() used to do in Samba +********************************************************************/ +int sys_select_intr(int maxfd, fd_set *fds,struct timeval *tval) +{ + int ret; + do { + ret = sys_select(maxfd, fds, tval); + } while (ret == -1 && errno == EINTR); + return ret; +} + + +/******************************************************************* A wrapper for usleep in case we don't have one. ********************************************************************/ |