Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 15 Dec 2014 10:58:03 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r275796 - stable/10/sys/rpc
Message-ID:  <201412151058.sBFAw3rY006281@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kib
Date: Mon Dec 15 10:58:02 2014
New Revision: 275796
URL: https://svnweb.freebsd.org/changeset/base/275796

Log:
  MFC r275618:
  Check for stop condition in nfsd threads.

Modified:
  stable/10/sys/rpc/svc.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/rpc/svc.c
==============================================================================
--- stable/10/sys/rpc/svc.c	Mon Dec 15 10:50:26 2014	(r275795)
+++ stable/10/sys/rpc/svc.c	Mon Dec 15 10:58:02 2014	(r275796)
@@ -1101,6 +1101,7 @@ svc_run_internal(SVCGROUP *grp, bool_t i
 	SVCXPRT *xprt;
 	enum xprt_stat stat;
 	struct svc_req *rqstp;
+	struct proc *p;
 	size_t sz;
 	int error;
 
@@ -1183,11 +1184,22 @@ svc_run_internal(SVCGROUP *grp, bool_t i
 					> grp->sg_minthreads)
 					&& !st->st_xprt)
 					break;
-			} else if (error) {
+			} else if (error != 0) {
+				KASSERT(error == EINTR || error == ERESTART,
+				    ("non-signal error %d", error));
 				mtx_unlock(&grp->sg_lock);
-				svc_exit(pool);
-				mtx_lock(&grp->sg_lock);
-				break;
+				p = curproc;
+				PROC_LOCK(p);
+				if (P_SHOULDSTOP(p)) {
+					thread_suspend_check(0);
+					PROC_UNLOCK(p);
+					mtx_lock(&grp->sg_lock);
+				} else {
+					PROC_UNLOCK(p);
+					svc_exit(pool);
+					mtx_lock(&grp->sg_lock);
+					break;
+				}
 			}
 			continue;
 		}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201412151058.sBFAw3rY006281>