Fix pthread's empth_select() not to change the timeout

Commit 08b94556 introduced the timeout parameter.  The empthread
implementation could change it, at least on some systems, and its user
worked around a possible change.  However, that behavior was not
documented, and it's inconvenient.  Fix the pthread implementation,
and remove the workaround.
This commit is contained in:
Markus Armbruster 2009-02-01 18:06:09 +01:00
parent 6564ff2240
commit 6144a363d6
2 changed files with 8 additions and 4 deletions

View file

@ -121,7 +121,6 @@ io_input(struct iop *iop, int waitforinput)
char buf[IO_BUFSIZE]; char buf[IO_BUFSIZE];
int cc; int cc;
int res; int res;
struct timeval timeout = iop->input_timeout;
/* Not a read IOP */ /* Not a read IOP */
if ((iop->flags & IO_READ) == 0) { if ((iop->flags & IO_READ) == 0) {
@ -135,7 +134,7 @@ io_input(struct iop *iop, int waitforinput)
} }
/* Wait for the file to have input. */ /* Wait for the file to have input. */
if (waitforinput) { if (waitforinput) {
res = empth_select(iop->fd, EMPTH_FD_READ, &timeout); res = empth_select(iop->fd, EMPTH_FD_READ, &iop->input_timeout);
if (res < 0) { if (res < 0) {
iop->flags |= IO_ERROR; iop->flags |= IO_ERROR;
return -1; return -1;

View file

@ -290,10 +290,11 @@ empth_terminate(empth_t *a)
} }
int int
empth_select(int fd, int flags, struct timeval *tv) empth_select(int fd, int flags, struct timeval *timeout)
{ {
fd_set readmask; fd_set readmask;
fd_set writemask; fd_set writemask;
struct timeval tv;
int n; int n;
int res = 0; int res = 0;
@ -318,7 +319,11 @@ empth_select(int fd, int flags, struct timeval *tv)
goto done; goto done;
} }
n = select(fd + 1, &readmask, &writemask, (fd_set *) 0, tv); if (timeout) {
tv = *timeout;
timeout = &tv;
}
n = select(fd + 1, &readmask, &writemask, NULL, timeout);
if (n < 0) { if (n < 0) {
if (errno == EINTR) /* go handle the signal */ if (errno == EINTR) /* go handle the signal */