Changeset View
Changeset View
Standalone View
Standalone View
sys/rpc/svc.c
Show First 20 Lines • Show All 197 Lines • ▼ Show 20 Lines | for (g = 0; g < SVC_MAXGROUPS; g++) { | ||||
mtx_lock(&grp->sg_lock); | mtx_lock(&grp->sg_lock); | ||||
while ((xprt = TAILQ_FIRST(&grp->sg_xlist)) != NULL) { | while ((xprt = TAILQ_FIRST(&grp->sg_xlist)) != NULL) { | ||||
xprt_unregister_locked(xprt); | xprt_unregister_locked(xprt); | ||||
TAILQ_INSERT_TAIL(&cleanup, xprt, xp_link); | TAILQ_INSERT_TAIL(&cleanup, xprt, xp_link); | ||||
} | } | ||||
mtx_unlock(&grp->sg_lock); | mtx_unlock(&grp->sg_lock); | ||||
} | } | ||||
TAILQ_FOREACH_SAFE(xprt, &cleanup, xp_link, nxprt) { | TAILQ_FOREACH_SAFE(xprt, &cleanup, xp_link, nxprt) { | ||||
if (xprt->xp_socket != NULL) | |||||
soshutdown(xprt->xp_socket, SHUT_WR); | |||||
SVC_RELEASE(xprt); | SVC_RELEASE(xprt); | ||||
} | } | ||||
mtx_lock(&pool->sp_lock); | mtx_lock(&pool->sp_lock); | ||||
while ((s = TAILQ_FIRST(&pool->sp_callouts)) != NULL) { | while ((s = TAILQ_FIRST(&pool->sp_callouts)) != NULL) { | ||||
mtx_unlock(&pool->sp_lock); | mtx_unlock(&pool->sp_lock); | ||||
svc_unreg(pool, s->sc_prog, s->sc_vers); | svc_unreg(pool, s->sc_prog, s->sc_vers); | ||||
mtx_lock(&pool->sp_lock); | mtx_lock(&pool->sp_lock); | ||||
▲ Show 20 Lines • Show All 169 Lines • ▼ Show 20 Lines | xprt_unregister(SVCXPRT *xprt) | ||||
if (xprt->xp_registered == FALSE) { | if (xprt->xp_registered == FALSE) { | ||||
/* Already unregistered by another thread */ | /* Already unregistered by another thread */ | ||||
mtx_unlock(&grp->sg_lock); | mtx_unlock(&grp->sg_lock); | ||||
return; | return; | ||||
} | } | ||||
xprt_unregister_locked(xprt); | xprt_unregister_locked(xprt); | ||||
mtx_unlock(&grp->sg_lock); | mtx_unlock(&grp->sg_lock); | ||||
if (xprt->xp_socket != NULL) | |||||
soshutdown(xprt->xp_socket, SHUT_WR); | |||||
SVC_RELEASE(xprt); | SVC_RELEASE(xprt); | ||||
} | } | ||||
/* | /* | ||||
* Attempt to assign a service thread to this transport. | * Attempt to assign a service thread to this transport. | ||||
*/ | */ | ||||
static int | static int | ||||
xprt_assignthread(SVCXPRT *xprt) | xprt_assignthread(SVCXPRT *xprt) | ||||
▲ Show 20 Lines • Show All 674 Lines • ▼ Show 20 Lines | TAILQ_FOREACH_SAFE(xprt, &grp->sg_xlist, xp_link, nxprt) { | ||||
if (time_uptime > timo) { | if (time_uptime > timo) { | ||||
xprt_unregister_locked(xprt); | xprt_unregister_locked(xprt); | ||||
TAILQ_INSERT_TAIL(&cleanup, xprt, xp_link); | TAILQ_INSERT_TAIL(&cleanup, xprt, xp_link); | ||||
} | } | ||||
} | } | ||||
mtx_unlock(&grp->sg_lock); | mtx_unlock(&grp->sg_lock); | ||||
TAILQ_FOREACH_SAFE(xprt, &cleanup, xp_link, nxprt) { | TAILQ_FOREACH_SAFE(xprt, &cleanup, xp_link, nxprt) { | ||||
soshutdown(xprt->xp_socket, SHUT_WR); | |||||
SVC_RELEASE(xprt); | SVC_RELEASE(xprt); | ||||
} | } | ||||
mtx_lock(&grp->sg_lock); | mtx_lock(&grp->sg_lock); | ||||
} | } | ||||
static void | static void | ||||
svc_assign_waiting_sockets(SVCPOOL *pool) | svc_assign_waiting_sockets(SVCPOOL *pool) | ||||
{ | { | ||||
▲ Show 20 Lines • Show All 389 Lines • Show Last 20 Lines |