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,

Reply via email to