Changeset View
Changeset View
Standalone View
Standalone View
sys/rpc/clnt_vc.c
Show First 20 Lines • Show All 441 Lines • ▼ Show 20 Lines | #endif | ||||
/* | /* | ||||
* sosend consumes mreq. | * sosend consumes mreq. | ||||
*/ | */ | ||||
error = sosend(ct->ct_socket, NULL, NULL, mreq, NULL, 0, curthread); | error = sosend(ct->ct_socket, NULL, NULL, mreq, NULL, 0, curthread); | ||||
mreq = NULL; | mreq = NULL; | ||||
if (error == EMSGSIZE || (error == ERESTART && | if (error == EMSGSIZE || (error == ERESTART && | ||||
(ct->ct_waitflag & PCATCH) == 0 && trycnt-- > 0)) { | (ct->ct_waitflag & PCATCH) == 0 && trycnt-- > 0)) { | ||||
SOCKBUF_LOCK(&ct->ct_socket->so_snd); | SOCKBUF_LOCK(&ct->ct_socket->so_snd); | ||||
sbwait(&ct->ct_socket->so_snd); | sbwait(ct->ct_socket, SO_SND); | ||||
SOCKBUF_UNLOCK(&ct->ct_socket->so_snd); | SOCKBUF_UNLOCK(&ct->ct_socket->so_snd); | ||||
AUTH_VALIDATE(auth, xid, NULL, NULL); | AUTH_VALIDATE(auth, xid, NULL, NULL); | ||||
mtx_lock(&ct->ct_lock); | mtx_lock(&ct->ct_lock); | ||||
TAILQ_REMOVE(&ct->ct_pending, cr, cr_link); | TAILQ_REMOVE(&ct->ct_pending, cr, cr_link); | ||||
/* Sleep for 1 clock tick before trying the sosend() again. */ | /* Sleep for 1 clock tick before trying the sosend() again. */ | ||||
msleep(&fake_wchan, &ct->ct_lock, 0, "rpclpsnd", 1); | msleep(&fake_wchan, &ct->ct_lock, 0, "rpclpsnd", 1); | ||||
goto call_again; | goto call_again; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 862 Lines • Show Last 20 Lines |