svn commit: r193649 - head/sys/rpc
Rick Macklem
rmacklem at FreeBSD.org
Sun Jun 7 20:38:43 UTC 2009
Author: rmacklem
Date: Sun Jun 7 20:38:41 2009
New Revision: 193649
URL: http://svn.freebsd.org/changeset/base/193649
Log:
Add a check to xprt_unregister() to catch the case where another
thread has already unregistered the structure. Also add a KASSERT()
to xprt_unregister_locked() to check that the structure hasn't already
been unregistered.
Reviewed by: jhb
Tested by: pho
Approved by: kib (mentor)
Modified:
head/sys/rpc/svc.c
Modified: head/sys/rpc/svc.c
==============================================================================
--- head/sys/rpc/svc.c Sun Jun 7 20:12:14 2009 (r193648)
+++ head/sys/rpc/svc.c Sun Jun 7 20:38:41 2009 (r193649)
@@ -293,6 +293,8 @@ xprt_unregister_locked(SVCXPRT *xprt)
{
SVCPOOL *pool = xprt->xp_pool;
+ KASSERT(xprt->xp_registered == TRUE,
+ ("xprt_unregister_locked: not registered"));
if (xprt->xp_active) {
TAILQ_REMOVE(&pool->sp_active, xprt, xp_alink);
xprt->xp_active = FALSE;
@@ -307,6 +309,11 @@ xprt_unregister(SVCXPRT *xprt)
SVCPOOL *pool = xprt->xp_pool;
mtx_lock(&pool->sp_lock);
+ if (xprt->xp_registered == FALSE) {
+ /* Already unregistered by another thread */
+ mtx_unlock(&pool->sp_lock);
+ return;
+ }
xprt_unregister_locked(xprt);
mtx_unlock(&pool->sp_lock);
More information about the svn-src-head
mailing list