From 249fd241a225b3b3723e55f7051ed4c7bf726e78 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Mon, 2 Aug 1999 19:56:07 +0000 Subject: Update. 1999-08-02 Thorsten Kukuk * nis/nis_callback.c (internal_nis_do_callback) use poll() instead of select(). 1999-08-02 Ulrich Drepper * sysdeps/generic/s_nextafter.c: Define __nexttoward and nexttoward so something else so that aliasing works. 1999-08-02 Thorsten Kukuk * sysdeps/generic/math_ldbl.h: Fix typo. * sysdeps/generic/strtold.c: Remove unbalanced #endif. * sysdeps/alpha/fpu/e_sqrt.c: Use new path for e_sqrt.c. 1999-08-02 Ulrich Drepper * elf/resolvfail.c: Include stdio.h. Also test dlerror. --- nis/nis_callback.c | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) (limited to 'nis') diff --git a/nis/nis_callback.c b/nis/nis_callback.c index 57a15e5162..eb5464479d 100644 --- a/nis/nis_callback.c +++ b/nis/nis_callback.c @@ -1,6 +1,6 @@ -/* Copyright (C) 1997, 1998 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc. This file is part of the GNU C Library. - Contributed by Thorsten Kukuk , 1997. + Contributed by Thorsten Kukuk , 1997. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -195,29 +196,29 @@ static nis_error internal_nis_do_callback (struct dir_binding *bptr, netobj *cookie, struct nis_cb *cb) { - /* Default timeout can be changed using clnt_control() */ - static struct timeval TIMEOUT = {25, 0}; -#ifdef FD_SETSIZE - fd_set readfds; -#else - int readfds; -#endif /* def FD_SETSIZE */ - struct timeval tv; + struct timeval TIMEOUT = {25, 0}; bool_t cb_is_running = FALSE; data = cb; for (;;) { -#ifdef FD_SETSIZE - readfds = svc_fdset; -#else - readfds = svc_fds; -#endif /* def FD_SETSIZE */ - tv.tv_sec = 25; - tv.tv_usec = 0; - switch (select (_rpc_dtablesize (), &readfds, NULL, NULL, &tv)) - { + struct pollfd *my_pollfd; + int i; + + if (svc_max_pollfd == 0 && svc_pollfd == NULL) + return NIS_CBERROR; + + my_pollfd = malloc (sizeof (struct pollfd) * svc_max_pollfd); + for (i = 0; i < svc_max_pollfd; ++i) + { + my_pollfd[i].fd = svc_pollfd[i].fd; + my_pollfd[i].events = svc_pollfd[i].events; + my_pollfd[i].revents = 0; + } + + switch (i = __poll (my_pollfd, svc_max_pollfd, 25*1000)) + { case -1: if (errno == EINTR) continue; @@ -237,7 +238,7 @@ internal_nis_do_callback (struct dir_binding *bptr, netobj *cookie, } break; default: - svc_getreqset (&readfds); + svc_getreq_poll (my_pollfd, i); if (data->nomore) return data->result; } -- cgit v1.2.3