summaryrefslogtreecommitdiff
path: root/source3/lib/system.c
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2000-06-11 05:57:58 +0000
committerAndrew Tridgell <tridge@samba.org>2000-06-11 05:57:58 +0000
commit8843a6379d7c1cf59f0f3673cbc567b09994b7d2 (patch)
tree63f645769adeecd6cfd999a8f2d873f1c5a626b6 /source3/lib/system.c
parent4ec7597d1154c60f0f55feab93f2dc9c776d56f8 (diff)
downloadsamba-8843a6379d7c1cf59f0f3673cbc567b09994b7d2.tar.gz
samba-8843a6379d7c1cf59f0f3673cbc567b09994b7d2.tar.bz2
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.c26
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.
********************************************************************/