diff options
author | Ulrich Drepper <drepper@redhat.com> | 1998-06-29 12:44:22 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1998-06-29 12:44:22 +0000 |
commit | fdacb17d4819c7112a147195c5ce3c82147f4b46 (patch) | |
tree | d1c400488d3bc8dfe707645a0fc38916e223614c /login/programs | |
parent | ba488034eabd1affd6b4b3e8838abde0f4d0504e (diff) | |
download | glibc-fdacb17d4819c7112a147195c5ce3c82147f4b46.zip glibc-fdacb17d4819c7112a147195c5ce3c82147f4b46.tar.gz glibc-fdacb17d4819c7112a147195c5ce3c82147f4b46.tar.bz2 |
Update.
1998-06-29 12:27 Ulrich Drepper <drepper@cygnus.com>
* 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 <schwab@issan.informatik.uni-dortmund.de>
* Makeconfig (CPPFLAGS): Use $($(subdir)-CPPFLAGS) only once.
1998-06-27 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* posix/wordexp.c (parse_param): Fix memory leak.
1998-06-27 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* libc.map: Export _IO_ftrylockfile.
1998-06-27 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/aio_sigqueue.c: Use get[pu]id instead of
__get[pu]id.
1998-06-28 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* 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 <aj@arthur.rhein-neckar.de>
* login/programs/utmpd.c (handle_requests): Set and use maximal fd
used to optimize loop/select.
1998-06-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* 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.
Diffstat (limited to 'login/programs')
-rw-r--r-- | login/programs/utmpd.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/login/programs/utmpd.c b/login/programs/utmpd.c index c2e9fe0..b3384f5 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 <kettenis@phys.uva.nl>, 1997. @@ -28,6 +28,7 @@ #include <stdlib.h> #include <signal.h> #include <string.h> +#include <sys/param.h> #include <sys/select.h> #include <sys/socket.h> #include <sys/stat.h> @@ -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; + } } } |