Module Name: src Committed By: snj Date: Tue Mar 22 08:01:38 UTC 2011
Modified Files: src/usr.sbin/nfsd [netbsd-4]: nfsd.c Log Message: Pull up following revision(s) (requested by bouyer in ticket #1414): usr.sbin/nfsd/nfsd.c: revision 1.57 via patch PR/42486: Ed Ravin nfsd sometimes exits prematurely during port-scan fix from freebsd bin 61084 applied (preserving errno properly). The accept code should be merged. To generate a diff of this commit: cvs rdiff -u -r1.49 -r1.49.2.1 src/usr.sbin/nfsd/nfsd.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.sbin/nfsd/nfsd.c diff -u src/usr.sbin/nfsd/nfsd.c:1.49 src/usr.sbin/nfsd/nfsd.c:1.49.2.1 --- src/usr.sbin/nfsd/nfsd.c:1.49 Sat Oct 7 17:27:57 2006 +++ src/usr.sbin/nfsd/nfsd.c Tue Mar 22 08:01:38 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: nfsd.c,v 1.49 2006/10/07 17:27:57 elad Exp $ */ +/* $NetBSD: nfsd.c,v 1.49.2.1 2011/03/22 08:01:38 snj Exp $ */ /* * Copyright (c) 1989, 1993, 1994 @@ -42,7 +42,7 @@ #if 0 static char sccsid[] = "@(#)nfsd.c 8.9 (Berkeley) 3/29/95"; #else -__RCSID("$NetBSD: nfsd.c,v 1.49 2006/10/07 17:27:57 elad Exp $"); +__RCSID("$NetBSD: nfsd.c,v 1.49.2.1 2011/03/22 08:01:38 snj Exp $"); #endif #endif /* not lint */ @@ -131,7 +131,7 @@ #endif struct pollfd set[4]; socklen_t len; - int ch, cltpflag, connect_type_cnt, i, maxsock, msgsock; + int ch, cltpflag, connect_type_cnt, i, maxsock, msgsock, serrno; int nfsdcnt, nfssvc_flag, on = 1, reregister, sock, tcpflag, tcpsock; int tcp6sock, ip6flag; int tp4cnt, tp4flag, tpipcnt, tpipflag, udpflag, ecode, s; @@ -623,7 +623,10 @@ len = sizeof(inetpeer); if ((msgsock = accept(tcpsock, (struct sockaddr *)&inetpeer, &len)) < 0) { + serrno = errno; syslog(LOG_ERR, "accept failed: %m"); + if (serrno == EINTR || serrno == ECONNABORTED) + continue; exit(1); } memset(inetpeer.sin_zero, 0, sizeof(inetpeer.sin_zero)); @@ -642,7 +645,10 @@ len = sizeof(inet6peer); if ((msgsock = accept(tcp6sock, (struct sockaddr *)&inet6peer, &len)) < 0) { + serrno = errno; syslog(LOG_ERR, "accept failed: %m"); + if (serrno == EINTR || serrno == ECONNABORTED) + continue; exit(1); } if (setsockopt(msgsock, SOL_SOCKET, @@ -661,7 +667,10 @@ len = sizeof(isopeer); if ((msgsock = accept(tp4sock, (struct sockaddr *)&isopeer, &len)) < 0) { + serrno = errno; syslog(LOG_ERR, "accept failed: %m"); + if (serrno == EINTR || serrno == ECONNABORTED) + continue; exit(1); } if (setsockopt(msgsock, SOL_SOCKET, @@ -679,7 +688,10 @@ len = sizeof(inetpeer); if ((msgsock = accept(tpipsock, (struct sockaddr *)&inetpeer, &len)) < 0) { + serrno = errno; syslog(LOG_ERR, "accept failed: %m"); + if (serrno == EINTR || serrno == ECONNABORTED) + continue; exit(1); } if (setsockopt(msgsock, SOL_SOCKET,