From 3b792849c676d96918850e2f1e0af87a75278501 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Fri, 9 Nov 2007 22:08:14 +0000 Subject: [PATCH] Change timeout parameter for yaz_poll. Change timeout paramater from seconds to seconds+nano-seconds for yaz_poll. Also make yaz_poll_{poll,select} static (internal). --- include/yaz/poll.h | 27 ++++----------------------- src/eventl.c | 6 +++--- src/poll.c | 22 ++++++++++++---------- src/zoom-socket.c | 4 ++-- 4 files changed, 21 insertions(+), 38 deletions(-) diff --git a/include/yaz/poll.h b/include/yaz/poll.h index f617bdd..f149c23 100644 --- a/include/yaz/poll.h +++ b/include/yaz/poll.h @@ -24,7 +24,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* $Id: poll.h,v 1.2 2007-11-09 19:00:08 adam Exp $ */ +/* $Id: poll.h,v 1.3 2007-11-09 22:08:14 adam Exp $ */ /** * \file @@ -58,30 +58,11 @@ struct yaz_poll_fd { void *client_data; }; -/** \brief socket poll wrapper using select - \param fds array of sockets to be polled - \param num_fds size of fds array (number of sockets) - \param timeout number of seconds to wait (-1 for no timeout) - \retval -1 error - \retval 0 timeout - \retval >0 event occur on one or more sockets -*/ -int yaz_poll_select(struct yaz_poll_fd *fds, int num_fds, int timeout); - -/** \brief socket poll using poll - \param fds array of sockets to be polled - \param num_fds size of fds array (number of sockets) - \param timeout number of seconds to wait (-1 for no timeout) - \retval -1 error - \retval 0 timeout - \retval >0 event occur on one or more sockets -*/ -int yaz_poll_poll(struct yaz_poll_fd *fds, int num_fds, int timeout); - /** \brief poll wrapper for poll or select \param fds array of sockets to be polled \param num_fds size of fds array (number of sockets) - \param timeout number of seconds to wait (-1 for no timeout) + \param sec number of seconds to wait (-1 for no timeout) + \param nsec nano seconds to wait \retval -1 error \retval 0 timeout \retval >0 event occur on one or more sockets @@ -89,7 +70,7 @@ int yaz_poll_poll(struct yaz_poll_fd *fds, int num_fds, int timeout); This functions calls yaz_poll_poll on systems where poll is available and yaz_poll_select where it it unavailable. */ -int yaz_poll(struct yaz_poll_fd *fds, int num_fds, int timeout); +int yaz_poll(struct yaz_poll_fd *fds, int num_fds, int sec, int nsec); YAZ_END_CDECL diff --git a/src/eventl.c b/src/eventl.c index 49e18f2..2764c92 100644 --- a/src/eventl.c +++ b/src/eventl.c @@ -2,7 +2,7 @@ * Copyright (C) 1995-2007, Index Data ApS * See the file LICENSE for details. * - * $Id: eventl.c,v 1.14 2007-11-09 19:00:42 adam Exp $ + * $Id: eventl.c,v 1.15 2007-11-09 22:08:14 adam Exp $ */ /** @@ -69,7 +69,7 @@ int iochan_is_alive(IOCHAN chan) fds.fd = chan->fd; fds.input_mask = yaz_poll_read; - res = yaz_poll(&fds, 1, 0); + res = yaz_poll(&fds, 1, 0, 0); if (res == 0) return 1; if (!ir_read(chan, EVENT_INPUT)) @@ -124,7 +124,7 @@ int event_loop(IOCHAN *iochans) fds[i].fd = p->fd; fds[i].input_mask = input_mask; } - res = yaz_poll(fds, no_fds, tv_sec); + res = yaz_poll(fds, no_fds, tv_sec, 0); if (res < 0) { if (yaz_errno() == EINTR) diff --git a/src/poll.c b/src/poll.c index c877f0a..f404c4f 100644 --- a/src/poll.c +++ b/src/poll.c @@ -2,7 +2,7 @@ * Copyright (C) 1995-2007, Index Data ApS * See the file LICENSE for details. * - * $Id: poll.c,v 1.1 2007-11-09 16:46:43 adam Exp $ + * $Id: poll.c,v 1.2 2007-11-09 22:08:14 adam Exp $ */ /** * \file @@ -48,7 +48,8 @@ cases, e.g. when running IRSpy on a large target database. So you should ensure that YAZ uses ZOOM_yaz_poll_poll() when possible. */ -int yaz_poll_select(struct yaz_poll_fd *fds, int num_fds, int timeout) +static int yaz_poll_select(struct yaz_poll_fd *fds, int num_fds, + int sec, int nsec) { struct timeval tv; fd_set input, output, except; @@ -74,11 +75,11 @@ int yaz_poll_select(struct yaz_poll_fd *fds, int num_fds, int timeout) if (max_fd < fd) max_fd = fd; } - tv.tv_sec = timeout; - tv.tv_usec = 0; + tv.tv_sec = sec; + tv.tv_usec = nsec / 1000; while ((r = select(max_fd+1, &input, &output, &except, - (timeout == -1 ? 0 : &tv))) < 0 && errno == EINTR) + (sec == -1 ? 0 : &tv))) < 0 && errno == EINTR) { ; } @@ -103,7 +104,8 @@ int yaz_poll_select(struct yaz_poll_fd *fds, int num_fds, int timeout) } #if HAVE_SYS_POLL_H -int yaz_poll_poll(struct yaz_poll_fd *fds, int num_fds, int timeout) +static int yaz_poll_poll(struct yaz_poll_fd *fds, int num_fds, + int sec, int nsec) { int r; struct pollfd *pollfds = (struct pollfd *) @@ -128,7 +130,7 @@ int yaz_poll_poll(struct yaz_poll_fd *fds, int num_fds, int timeout) pollfds[i].revents = 0; } while ((r = poll(pollfds, num_fds, - (timeout == -1 ? -1 : timeout * 1000))) < 0 + (sec == -1 ? -1 : sec*1000 + nsec/1000000))) < 0 && errno == EINTR) { ; @@ -157,12 +159,12 @@ int yaz_poll_poll(struct yaz_poll_fd *fds, int num_fds, int timeout) } #endif -int yaz_poll(struct yaz_poll_fd *fds, int num_fds, int timeout) +int yaz_poll(struct yaz_poll_fd *fds, int num_fds, int sec, int nsec) { #if YAZ_HAVE_SYS_POLL_H - return yaz_poll_poll(fds, num_fds, timeout); + return yaz_poll_poll(fds, num_fds, sec, nsec); #else - return yaz_poll_select(fds, num_fds, timeout); + return yaz_poll_select(fds, num_fds, sec, nsec); #endif } diff --git a/src/zoom-socket.c b/src/zoom-socket.c index da72eda..119d680 100644 --- a/src/zoom-socket.c +++ b/src/zoom-socket.c @@ -2,7 +2,7 @@ * Copyright (C) 1995-2007, Index Data ApS * See the file LICENSE for details. * - * $Id: zoom-socket.c,v 1.5 2007-11-09 16:46:43 adam Exp $ + * $Id: zoom-socket.c,v 1.6 2007-11-09 22:08:14 adam Exp $ */ /** * \file zoom-socket.c @@ -68,7 +68,7 @@ ZOOM_API(int) xfree(yp); return 0; } - r = yaz_poll(yp, nfds, timeout); + r = yaz_poll(yp, nfds, timeout, 0); if (r >= 0) { for (i = 0; i < nfds; i++) -- 1.7.10.4