svn commit: r219249 - stable/7/usr.sbin/nfsd
John Baldwin
jhb at FreeBSD.org
Thu Mar 3 19:57:50 UTC 2011
Author: jhb
Date: Thu Mar 3 19:57:49 2011
New Revision: 219249
URL: http://svn.freebsd.org/changeset/base/219249
Log:
MFC 218777:
Save a copy of errno before invoking syslog() if accept() or select() fail.
syslog() can trash the errno value causing nfsd to exit for non-fatal
errors like ECONNABORTED from accept().
Modified:
stable/7/usr.sbin/nfsd/nfsd.c
Directory Properties:
stable/7/usr.sbin/nfsd/ (props changed)
Modified: stable/7/usr.sbin/nfsd/nfsd.c
==============================================================================
--- stable/7/usr.sbin/nfsd/nfsd.c Thu Mar 3 19:57:38 2011 (r219248)
+++ stable/7/usr.sbin/nfsd/nfsd.c Thu Mar 3 19:57:49 2011 (r219249)
@@ -128,7 +128,7 @@ main(int argc, char **argv)
socklen_t len;
int on = 1, unregister, reregister, sock;
int tcp6sock, ip6flag, tcpflag, tcpsock;
- int udpflag, ecode, s, srvcnt;
+ int udpflag, ecode, error, s, srvcnt;
int bindhostc, bindanyflag, rpcbreg, rpcbregcnt;
char **bindhost = NULL;
pid_t pid;
@@ -652,8 +652,9 @@ main(int argc, char **argv)
if (connect_type_cnt > 1) {
if (select(maxsock + 1,
&ready, NULL, NULL, NULL) < 1) {
+ error = errno;
syslog(LOG_ERR, "select failed: %m");
- if (errno == EINTR)
+ if (error == EINTR)
continue;
nfsd_exit(1);
}
@@ -664,9 +665,10 @@ main(int argc, char **argv)
len = sizeof(inetpeer);
if ((msgsock = accept(tcpsock,
(struct sockaddr *)&inetpeer, &len)) < 0) {
+ error = errno;
syslog(LOG_ERR, "accept failed: %m");
- if (errno == ECONNABORTED ||
- errno == EINTR)
+ if (error == ECONNABORTED ||
+ error == EINTR)
continue;
nfsd_exit(1);
}
@@ -686,10 +688,11 @@ main(int argc, char **argv)
if ((msgsock = accept(tcpsock,
(struct sockaddr *)&inet6peer,
&len)) < 0) {
+ error = errno;
syslog(LOG_ERR,
"accept failed: %m");
- if (errno == ECONNABORTED ||
- errno == EINTR)
+ if (error == ECONNABORTED ||
+ error == EINTR)
continue;
nfsd_exit(1);
}
More information about the svn-src-stable
mailing list