diff options
author | mav <mav@FreeBSD.org> | 2014-01-22 23:51:12 +0000 |
---|---|---|
committer | mav <mav@FreeBSD.org> | 2014-01-22 23:51:12 +0000 |
commit | 695b5b9179f2f608ff6042914c460cc75dc11519 (patch) | |
tree | 5419eeab7a2baed05f1ecc4daeba3a78189fa04b /sys/rpc/svc_dg.c | |
parent | ec416d0ab84b2e916ae2498d35cf43ef91370909 (diff) | |
download | FreeBSD-src-695b5b9179f2f608ff6042914c460cc75dc11519.zip FreeBSD-src-695b5b9179f2f608ff6042914c460cc75dc11519.tar.gz |
MFC r260036:
Introduce xprt_inactive_self() -- variant for use when sure that port
is assigned to thread. For example, withing receive handlers. In that
case the function reduces to single assignment and can avoid locking.
Diffstat (limited to 'sys/rpc/svc_dg.c')
-rw-r--r-- | sys/rpc/svc_dg.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/sys/rpc/svc_dg.c b/sys/rpc/svc_dg.c index 861c26e..79f8429 100644 --- a/sys/rpc/svc_dg.c +++ b/sys/rpc/svc_dg.c @@ -196,10 +196,10 @@ svc_dg_recv(SVCXPRT *xprt, struct rpc_msg *msg, * from racing the upcall after our soreadable() call * returns false. */ - mtx_lock(&xprt->xp_pool->sp_lock); + SOCKBUF_LOCK(&xprt->xp_socket->so_rcv); if (!soreadable(xprt->xp_socket)) - xprt_inactive_locked(xprt); - mtx_unlock(&xprt->xp_pool->sp_lock); + xprt_inactive_self(xprt); + SOCKBUF_UNLOCK(&xprt->xp_socket->so_rcv); sx_xunlock(&xprt->xp_lock); return (FALSE); } @@ -208,7 +208,7 @@ svc_dg_recv(SVCXPRT *xprt, struct rpc_msg *msg, SOCKBUF_LOCK(&xprt->xp_socket->so_rcv); soupcall_clear(xprt->xp_socket, SO_RCV); SOCKBUF_UNLOCK(&xprt->xp_socket->so_rcv); - xprt_inactive(xprt); + xprt_inactive_self(xprt); sx_xunlock(&xprt->xp_lock); return (FALSE); } |