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:
parent
6564ff2240
commit
6144a363d6
2 changed files with 8 additions and 4 deletions
|
@ -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;
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue