Home | History | Annotate | Download | only in librpc

Lines Matching refs:xprt

35  * There are two sets of procedures here.  The xprt routines are
76 SVCXPRT *xprt;
105 void svc_dispatch(registered_server *svc, SVCXPRT *xprt);
109 SVCXPRT *xprt = (SVCXPRT *)__u;
113 while(xprt->num_servers) {
114 rfds = xprt->fdset;
116 n = select(xprt->max_fd + 1, (fd_set *)&rfds, NULL, NULL, &tv);
123 for (n = 0; n <= xprt->max_fd; n++) {
128 registered_server *trav = xprt->servers;
133 svc_dispatch(trav, xprt);
147 SVCXPRT *xprt;
151 xprt = the_xprt;
153 xprt = calloc(1, sizeof(SVCXPRT));
154 if (xprt) {
155 FD_ZERO(&xprt->fdset);
156 xprt->max_fd = 0;
157 pthread_attr_init(&xprt->thread_attr);
158 pthread_attr_setdetachstate(&xprt->thread_attr,
160 pthread_mutexattr_init(&xprt->lock_attr);
161 // pthread_mutexattr_settype(&xprt->lock_attr,
163 pthread_mutex_init(&xprt->lock, &xprt->lock_attr);
167 return xprt;
170 void svc_destroy(SVCXPRT *xprt)
175 /* NOTE: this function must always be called with the xprt->lock held! */
176 static registered_server* svc_find_nosync(SVCXPRT *xprt,
181 trav = xprt->servers;
191 registered_server* svc_find(SVCXPRT *xprt,
194 pthread_mutex_lock(&xprt->lock);
195 registered_server *svc = svc_find_nosync(xprt, prog, vers, NULL);
196 pthread_mutex_unlock(&xprt->lock);
200 bool_t svc_register (SVCXPRT *xprt, rpcprog_t prog, rpcvers_t vers,
207 pthread_mutex_lock(&xprt->lock);
211 svc = svc_find_nosync(xprt, prog, vers, NULL);
215 pthread_mutex_unlock(&xprt->lock);
242 pthread_mutex_unlock(&xprt->lock);
257 pthread_mutex_unlock(&xprt->lock);
261 FD_SET(svc->xdr->fd, &xprt->fdset);
262 if (svc->xdr->fd > xprt->max_fd) xprt->max_fd = svc->xdr->fd;
268 svc->next = xprt->servers;
269 xprt->servers = svc;
270 xprt->num_servers++;
272 (uint32_t)prog, (int)vers, xprt->num_servers);
273 svc->xprt = xprt;
274 if (xprt->num_servers == 1) {
276 pthread_create(&xprt->svc_thread,
277 &xprt->thread_attr,
278 svc_context, xprt);
280 pthread_mutex_unlock(&xprt->lock);
284 void svc_unregister (SVCXPRT *xprt, rpcprog_t prog, rpcvers_t vers) {
286 pthread_mutex_lock(&xprt->lock);
287 found = svc_find_nosync(xprt, prog, vers, &prev);
298 xprt->servers = found->next;
306 /* don't bother decreasing the xprt->max_fd to the previous
318 FD_CLR(found->xdr->fd, &xprt->fdset);
331 xprt->num_servers--;
333 (unsigned)prog, (unsigned)vers, xprt->num_servers);
335 pthread_mutex_unlock(&xprt->lock);
357 void svc_dispatch(registered_server *svc, SVCXPRT *xprt)
393 req.rq_xprt = xprt;
412 void xprt_register(SVCXPRT *xprt)
415 if (!the_xprt || (xprt && (xprt == the_xprt))) {
417 the_xprt = xprt;
424 void xprt_unregister (SVCXPRT *xprt)
427 if (xprt && xprt == the_xprt) {
433 pthread_attr_destroy(&xprt->thread_attr);
434 pthread_mutexattr_destroy(&xprt->lock_attr);
435 pthread_mutex_destroy(&xprt->lock);
436 /* Make sure the thread has existed before we free the xprt
441 pthread_join(xprt->svc_thread, NULL);
442 free(xprt);
453 XDR of the server that they refer to. The xprt pointer is actually a
458 bool_t svc_getargs(SVCXPRT *xprt, xdrproc_t xdr_args, caddr_t args_ptr)
460 registered_server *serv = (registered_server *)xprt;
469 bool_t svc_freeargs (SVCXPRT * xprt, xdrproc_t xdr_args, caddr_t args_ptr)
471 registered_server *serv = (registered_server *)xprt;
481 svc_sendreply (SVCXPRT *xprt, xdrproc_t xdr_results,
484 registered_server *serv = (registered_server *)xprt;
515 void svcerr_decode (SVCXPRT *xprt)
517 registered_server *serv = (registered_server *)xprt;
530 void svcerr_systemerr (SVCXPRT *xprt)
532 registered_server *serv = (registered_server *)xprt;
545 void svcerr_noproc(SVCXPRT *xprt)
547 registered_server *serv = (registered_server *)xprt;