summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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 5db4c56..8c3bd2c 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);
OpenPOWER on IntegriCloud