Lines Matching refs:ct

120 	struct ct_data *ct = NULL;	/* client handle */  in clnt_bck_create()  local
130 ct = (struct ct_data *)mem_alloc(sizeof (*ct)); in clnt_bck_create()
132 mtx_init(&ct->ct_lock, "ct->ct_lock", NULL, MTX_DEF); in clnt_bck_create()
133 ct->ct_threads = 0; in clnt_bck_create()
134 ct->ct_closing = FALSE; in clnt_bck_create()
135 ct->ct_closed = FALSE; in clnt_bck_create()
136 ct->ct_upcallrefs = 0; in clnt_bck_create()
137 ct->ct_closeit = FALSE; in clnt_bck_create()
142 ct->ct_wait.tv_sec = -1; in clnt_bck_create()
143 ct->ct_wait.tv_usec = -1; in clnt_bck_create()
149 ct->ct_xid = ((uint32_t)++disrupt) ^ __RPC_GETXID(&now); in clnt_bck_create()
150 call_msg.rm_xid = ct->ct_xid; in clnt_bck_create()
159 xdrmem_create(&xdrs, ct->ct_mcallc, MCALL_MSG_SIZE, in clnt_bck_create()
163 ct->ct_mpos = XDR_GETPOS(&xdrs); in clnt_bck_create()
165 ct->ct_waitchan = "rpcbck"; in clnt_bck_create()
166 ct->ct_waitflag = 0; in clnt_bck_create()
169 cl->cl_private = ct; in clnt_bck_create()
171 TAILQ_INIT(&ct->ct_pending); in clnt_bck_create()
175 mtx_destroy(&ct->ct_lock); in clnt_bck_create()
176 mem_free(ct, sizeof (struct ct_data)); in clnt_bck_create()
191 struct ct_data *ct = (struct ct_data *) cl->cl_private; in clnt_bck_call() local
210 mtx_lock(&ct->ct_lock); in clnt_bck_call()
212 if (ct->ct_closing || ct->ct_closed) { in clnt_bck_call()
213 mtx_unlock(&ct->ct_lock); in clnt_bck_call()
217 ct->ct_threads++; in clnt_bck_call()
224 errp = &ct->ct_error; in clnt_bck_call()
230 if (ct->ct_wait.tv_usec == -1) in clnt_bck_call()
233 timeout = ct->ct_wait; /* use default timeout */ in clnt_bck_call()
236 mtx_assert(&ct->ct_lock, MA_OWNED); in clnt_bck_call()
238 ct->ct_xid++; in clnt_bck_call()
239 xid = ct->ct_xid; in clnt_bck_call()
241 mtx_unlock(&ct->ct_lock); in clnt_bck_call()
248 KASSERT(ct->ct_mpos + sizeof(uint32_t) <= MHLEN, in clnt_bck_call()
250 bcopy(ct->ct_mcallc, mreq->m_data, ct->ct_mpos); in clnt_bck_call()
251 mreq->m_len = ct->ct_mpos; in clnt_bck_call()
266 mtx_lock(&ct->ct_lock); in clnt_bck_call()
279 mtx_lock(&ct->ct_lock); in clnt_bck_call()
288 if (ct->ct_error.re_status == RPC_CANTRECV) { in clnt_bck_call()
289 if (errp != &ct->ct_error) { in clnt_bck_call()
290 errp->re_errno = ct->ct_error.re_errno; in clnt_bck_call()
296 TAILQ_INSERT_TAIL(&ct->ct_pending, cr, cr_link); in clnt_bck_call()
297 mtx_unlock(&ct->ct_lock); in clnt_bck_call()
326 mtx_lock(&ct->ct_lock); in clnt_bck_call()
327 TAILQ_REMOVE(&ct->ct_pending, cr, cr_link); in clnt_bck_call()
338 mtx_lock(&ct->ct_lock); in clnt_bck_call()
340 TAILQ_REMOVE(&ct->ct_pending, cr, cr_link); in clnt_bck_call()
352 TAILQ_REMOVE(&ct->ct_pending, cr, cr_link); in clnt_bck_call()
358 TAILQ_REMOVE(&ct->ct_pending, cr, cr_link); in clnt_bck_call()
366 TAILQ_REMOVE(&ct->ct_pending, cr, cr_link); in clnt_bck_call()
371 error = msleep(cr, &ct->ct_lock, ct->ct_waitflag, ct->ct_waitchan, in clnt_bck_call()
374 TAILQ_REMOVE(&ct->ct_pending, cr, cr_link); in clnt_bck_call()
413 mtx_unlock(&ct->ct_lock); in clnt_bck_call()
450 mtx_lock(&ct->ct_lock); in clnt_bck_call()
458 mtx_lock(&ct->ct_lock); in clnt_bck_call()
460 mtx_assert(&ct->ct_lock, MA_OWNED); in clnt_bck_call()
470 ct->ct_threads--; in clnt_bck_call()
471 if (ct->ct_closing) in clnt_bck_call()
472 wakeup(ct); in clnt_bck_call()
474 mtx_unlock(&ct->ct_lock); in clnt_bck_call()
487 struct ct_data *ct = (struct ct_data *) cl->cl_private; in clnt_bck_geterr() local
489 *errp = ct->ct_error; in clnt_bck_geterr()
520 struct ct_data *ct = (struct ct_data *) cl->cl_private; in clnt_bck_close() local
522 mtx_lock(&ct->ct_lock); in clnt_bck_close()
524 if (ct->ct_closed) { in clnt_bck_close()
525 mtx_unlock(&ct->ct_lock); in clnt_bck_close()
529 if (ct->ct_closing) { in clnt_bck_close()
530 while (ct->ct_closing) in clnt_bck_close()
531 msleep(ct, &ct->ct_lock, 0, "rpcclose", 0); in clnt_bck_close()
532 KASSERT(ct->ct_closed, ("client should be closed")); in clnt_bck_close()
533 mtx_unlock(&ct->ct_lock); in clnt_bck_close()
537 ct->ct_closing = FALSE; in clnt_bck_close()
538 ct->ct_closed = TRUE; in clnt_bck_close()
539 mtx_unlock(&ct->ct_lock); in clnt_bck_close()
540 wakeup(ct); in clnt_bck_close()
546 struct ct_data *ct = (struct ct_data *) cl->cl_private; in clnt_bck_destroy() local
550 mtx_destroy(&ct->ct_lock); in clnt_bck_destroy()
551 mem_free(ct, sizeof(struct ct_data)); in clnt_bck_destroy()
570 struct ct_data *ct; in clnt_bck_svccall() local
574 ct = (struct ct_data *)cl->cl_private; in clnt_bck_svccall()
575 mtx_lock(&ct->ct_lock); in clnt_bck_svccall()
576 if (ct->ct_closing || ct->ct_closed) { in clnt_bck_svccall()
577 mtx_unlock(&ct->ct_lock); in clnt_bck_svccall()
582 ct->ct_upcallrefs++; in clnt_bck_svccall()
587 TAILQ_FOREACH(cr, &ct->ct_pending, cr_link) { in clnt_bck_svccall()
603 ct->ct_upcallrefs--; in clnt_bck_svccall()
604 if (ct->ct_upcallrefs < 0) in clnt_bck_svccall()
606 if (ct->ct_upcallrefs == 0) in clnt_bck_svccall()
607 wakeup(&ct->ct_upcallrefs); in clnt_bck_svccall()
608 mtx_unlock(&ct->ct_lock); in clnt_bck_svccall()