summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/lib/select.c18
1 files changed, 6 insertions, 12 deletions
diff --git a/source3/lib/select.c b/source3/lib/select.c
index efcf63becc..f88ad52de6 100644
--- a/source3/lib/select.c
+++ b/source3/lib/select.c
@@ -102,6 +102,12 @@ int sys_select(int maxfd, fd_set *readfds, fd_set *writefds, fd_set *errorfds, s
}
if (FD_ISSET(select_pipe[0], readfds2)) {
+ char c;
+ saved_errno = errno;
+ if (read(select_pipe[0], &c, 1) == 1) {
+ pipe_read++;
+ }
+ errno = saved_errno;
FD_CLR(select_pipe[0], readfds2);
ret--;
if (ret == 0) {
@@ -110,18 +116,6 @@ int sys_select(int maxfd, fd_set *readfds, fd_set *writefds, fd_set *errorfds, s
}
}
- saved_errno = errno;
-
- while (pipe_written != pipe_read) {
- char c;
- /* Due to the linux kernel bug in 2.0.x, we
- * always increment here even if the read failed... */
- read(select_pipe[0], &c, 1);
- pipe_read++;
- }
-
- errno = saved_errno;
-
return ret;
}