From fdacb17d4819c7112a147195c5ce3c82147f4b46 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Mon, 29 Jun 1998 12:44:22 +0000 Subject: Update. 1998-06-29 12:27 Ulrich Drepper * argp/argp.h: Use __PMT instead of __P for function pointer. * iconv/gconv.h: Likewise. * io/fts.h: Likewise. * io/ftw.h: Likewise. * libio/libio.h: Likewise. * malloc/mcheck.h: Likewise. * misc/search.h: Likewise. * posix/glob.h: Likewise. * resolv/resolv.h: Likewise. * signal/signal.h: Likewise. * stdlib/stdlib.h: Likewise. * sysdeps/unix/sysv/linux/bits/sigaction.h: Likewise. * sysdeps/unix/sysv/linux/bits/siginfo.h: Likewise. 1998-06-26 Andreas Schwab * Makeconfig (CPPFLAGS): Use $($(subdir)-CPPFLAGS) only once. 1998-06-27 Andreas Schwab * posix/wordexp.c (parse_param): Fix memory leak. 1998-06-27 Andreas Schwab * libc.map: Export _IO_ftrylockfile. 1998-06-27 Andreas Schwab * sysdeps/unix/sysv/linux/aio_sigqueue.c: Use get[pu]id instead of __get[pu]id. 1998-06-28 Andreas Schwab * elf/dl-misc.c (_dl_debug_message): Don't cache the pid. * elf/dl-runtime.c (_dl_object_relocation_scope): Avoid adding the same search list twice. 1998-06-29 Andreas Jaeger * login/programs/utmpd.c (handle_requests): Set and use maximal fd used to optimize loop/select. 1998-06-24 Andreas Schwab * sysdeps/generic/init-first.c: Don't define __libc_pid. * sysdeps/unix/sysv/linux/init-first.c: Likewise. * sysdeps/mach/hurd/i386/init-first.c: Likewise. * sysdeps/mach/hurd/mips/init-first.c: Likewise. * sysdeps/arm/init-first.c: Likewise. * posix/getopt_init.c: Don't use __libc_pid. * sysdeps/unix/sysv/linux/aio_sigqueue.c: Likewise. * sysdeps/unix/sysv/linux/sigqueue.c: Likewise. * libc.map: Remove __libc_uid and __libc_pid. --- login/programs/utmpd.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'login') diff --git a/login/programs/utmpd.c b/login/programs/utmpd.c index c2e9fe0a8b..b3384f51d5 100644 --- a/login/programs/utmpd.c +++ b/login/programs/utmpd.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1997 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Mark Kettenis , 1997. @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -270,6 +271,7 @@ void handle_requests (void) fd_set read_fd_set; fd_set write_fd_set; int fd; + int maxfd; /* Highest used fd to optimize select/loop. */ /* Initialize the set of active sockets. */ FD_ZERO (&active_read_fd_set); @@ -277,16 +279,18 @@ void handle_requests (void) FD_SET (rw_sock, &active_read_fd_set); FD_SET (ro_sock, &active_read_fd_set); + maxfd = MAX (rw_sock, ro_sock); + while (1) { /* Block until input arrives on one or more active sockets. */ read_fd_set = active_read_fd_set; write_fd_set = active_write_fd_set; - if (select (FD_SETSIZE, &read_fd_set, &write_fd_set, NULL, NULL) < 0) + if (select (maxfd + 1, &read_fd_set, &write_fd_set, NULL, NULL) < 0) error (EXIT_FAILURE, errno, _("cannot get input on sockets")); /* Service all the sockets with input pending. */ - for (fd = 0; fd < FD_SETSIZE; fd++) + for (fd = 0; fd <= maxfd; ++fd) { if (FD_ISSET (fd, &read_fd_set)) { @@ -299,6 +303,7 @@ void handle_requests (void) error (0, errno, _("cannot accept connection")); FD_SET (connection->sock, &active_read_fd_set); + maxfd = MAX (maxfd, connection->sock); } else { @@ -335,6 +340,14 @@ void handle_requests (void) FD_CLR (fd, &active_write_fd_set); } } + + /* Check if maxfd can be lowered. */ + for (; maxfd >= 0; --maxfd) + { + if (FD_ISSET (maxfd, &active_read_fd_set) + || FD_ISSET (maxfd, &active_write_fd_set)) + break; + } } } -- cgit 1.4.1