diff options
author | Andrew Tridgell <tridge@samba.org> | 2000-06-11 05:57:58 +0000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2000-06-11 05:57:58 +0000 |
commit | 8843a6379d7c1cf59f0f3673cbc567b09994b7d2 (patch) | |
tree | 63f645769adeecd6cfd999a8f2d873f1c5a626b6 /source3/lib/system.c | |
parent | 4ec7597d1154c60f0f55feab93f2dc9c776d56f8 (diff) | |
download | samba-8843a6379d7c1cf59f0f3673cbc567b09994b7d2.tar.gz samba-8843a6379d7c1cf59f0f3673cbc567b09994b7d2.tar.xz samba-8843a6379d7c1cf59f0f3673cbc567b09994b7d2.zip |
Linux kernel oplocks now seem to work, but need a _lot_ of testing
I had to modify sys_select() to not loop on EINTR. I added a wrapper
called sys_select_intr() which gives the old behaviour.
(This used to be commit b28cc4163bc2faaa80c5782fc02c8f03c410cdeb)
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. ********************************************************************/ |