summaryrefslogtreecommitdiff
path: root/sys/rpc
diff options
context:
space:
mode:
authorRick Macklem <rmacklem@FreeBSD.org>2009-06-07 20:38:41 +0000
committerRick Macklem <rmacklem@FreeBSD.org>2009-06-07 20:38:41 +0000
commitbca2ec16a6d2cd9fc9e287e8e516792c63ecbf34 (patch)
tree7be2da1e46f155adfa61f792d1768c5ce5979fed /sys/rpc
parentdc344ca5a463378a99e22c58e2b8e0b5823cb581 (diff)
Notes
Diffstat (limited to 'sys/rpc')
-rw-r--r--sys/rpc/svc.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/sys/rpc/svc.c b/sys/rpc/svc.c
index 5db4c565d32f..8c3bd2c96292 100644
--- a/sys/rpc/svc.c
+++ b/sys/rpc/svc.c
@@ -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);