From 6144a363d6a2047d195b74b530a1f7e8e4be1f7b Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sun, 1 Feb 2009 18:06:09 +0100 Subject: [PATCH] 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. --- src/lib/empthread/io.c | 3 +-- src/lib/empthread/pthread.c | 9 +++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/lib/empthread/io.c b/src/lib/empthread/io.c index 85cad537d..5d4d06c46 100644 --- a/src/lib/empthread/io.c +++ b/src/lib/empthread/io.c @@ -121,7 +121,6 @@ io_input(struct iop *iop, int waitforinput) char buf[IO_BUFSIZE]; int cc; int res; - struct timeval timeout = iop->input_timeout; /* Not a read IOP */ if ((iop->flags & IO_READ) == 0) { @@ -135,7 +134,7 @@ io_input(struct iop *iop, int waitforinput) } /* Wait for the file to have input. */ 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) { iop->flags |= IO_ERROR; return -1; diff --git a/src/lib/empthread/pthread.c b/src/lib/empthread/pthread.c index 57a887ff8..0f421ce95 100644 --- a/src/lib/empthread/pthread.c +++ b/src/lib/empthread/pthread.c @@ -290,10 +290,11 @@ empth_terminate(empth_t *a) } int -empth_select(int fd, int flags, struct timeval *tv) +empth_select(int fd, int flags, struct timeval *timeout) { fd_set readmask; fd_set writemask; + struct timeval tv; int n; int res = 0; @@ -318,7 +319,11 @@ empth_select(int fd, int flags, struct timeval *tv) 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 (errno == EINTR) /* go handle the signal */ -- 2.43.0