174462Salfred/* $NetBSD: mt_misc.c,v 1.1 2000/06/02 23:11:11 fvdl Exp $ */ 274462Salfred 374462Salfred/* #pragma ident "@(#)mt_misc.c 1.24 93/04/29 SMI" */ 492990Sobrien#include <sys/cdefs.h> 592990Sobrien__FBSDID("$FreeBSD$"); 692990Sobrien 775094Siedowse#include "namespace.h" 874462Salfred#include "reentrant.h" 974462Salfred#include <rpc/rpc.h> 1074462Salfred#include <sys/time.h> 1174462Salfred#include <stdlib.h> 12111010Snectar#include <string.h> 1374462Salfred#include "un-namespace.h" 14156090Sdeischen#include "mt_misc.h" 1574462Salfred 16156090Sdeischen/* Take these objects out of the application namespace. */ 17156090Sdeischen#define svc_lock __svc_lock 18156090Sdeischen#define svc_fd_lock __svc_fd_lock 19156090Sdeischen#define rpcbaddr_cache_lock __rpcbaddr_cache_lock 20156090Sdeischen#define authdes_ops_lock __authdes_ops_lock 21156090Sdeischen#define authnone_lock __authnone_lock 22156090Sdeischen#define authsvc_lock __authsvc_lock 23156090Sdeischen#define clnt_fd_lock __clnt_fd_lock 24156090Sdeischen#define clntraw_lock __clntraw_lock 25156090Sdeischen#define dupreq_lock __dupreq_lock 26156090Sdeischen#define loopnconf_lock __loopnconf_lock 27156090Sdeischen#define ops_lock __ops_lock 28156090Sdeischen#define proglst_lock __proglst_lock 29156090Sdeischen#define rpcsoc_lock __rpcsoc_lock 30156090Sdeischen#define svcraw_lock __svcraw_lock 31156090Sdeischen#define xprtlist_lock __xprtlist_lock 32156090Sdeischen 3374462Salfred/* protects the services list (svc.c) */ 3474462Salfredpthread_rwlock_t svc_lock = PTHREAD_RWLOCK_INITIALIZER; 3574462Salfred 3674462Salfred/* protects svc_fdset and the xports[] array */ 3774462Salfredpthread_rwlock_t svc_fd_lock = PTHREAD_RWLOCK_INITIALIZER; 3874462Salfred 3974462Salfred/* protects the RPCBIND address cache */ 4074462Salfredpthread_rwlock_t rpcbaddr_cache_lock = PTHREAD_RWLOCK_INITIALIZER; 4174462Salfred 4274462Salfred/* serializes authdes ops initializations */ 4374462Salfredpthread_mutex_t authdes_ops_lock = PTHREAD_MUTEX_INITIALIZER; 4474462Salfred 4574462Salfred/* protects des stats list */ 4674462Salfredpthread_mutex_t svcauthdesstats_lock = PTHREAD_MUTEX_INITIALIZER; 4774462Salfred 4874462Salfred/* auth_none.c serialization */ 4974462Salfredpthread_mutex_t authnone_lock = PTHREAD_MUTEX_INITIALIZER; 5074462Salfred 5174462Salfred/* protects the Auths list (svc_auth.c) */ 5274462Salfredpthread_mutex_t authsvc_lock = PTHREAD_MUTEX_INITIALIZER; 5374462Salfred 5474462Salfred/* protects client-side fd lock array */ 5574462Salfredpthread_mutex_t clnt_fd_lock = PTHREAD_MUTEX_INITIALIZER; 5674462Salfred 5774462Salfred/* clnt_raw.c serialization */ 5874462Salfredpthread_mutex_t clntraw_lock = PTHREAD_MUTEX_INITIALIZER; 5974462Salfred 6074462Salfred/* dupreq variables (svc_dg.c) */ 6174462Salfredpthread_mutex_t dupreq_lock = PTHREAD_MUTEX_INITIALIZER; 6274462Salfred 6374462Salfred/* loopnconf (rpcb_clnt.c) */ 6474462Salfredpthread_mutex_t loopnconf_lock = PTHREAD_MUTEX_INITIALIZER; 6574462Salfred 6674462Salfred/* serializes ops initializations */ 6774462Salfredpthread_mutex_t ops_lock = PTHREAD_MUTEX_INITIALIZER; 6874462Salfred 6974462Salfred/* protects proglst list (svc_simple.c) */ 7074462Salfredpthread_mutex_t proglst_lock = PTHREAD_MUTEX_INITIALIZER; 7174462Salfred 7274462Salfred/* serializes clnt_com_create() (rpc_soc.c) */ 7374462Salfredpthread_mutex_t rpcsoc_lock = PTHREAD_MUTEX_INITIALIZER; 7474462Salfred 7574462Salfred/* svc_raw.c serialization */ 7674462Salfredpthread_mutex_t svcraw_lock = PTHREAD_MUTEX_INITIALIZER; 7774462Salfred 7874462Salfred/* xprtlist (svc_generic.c) */ 7974462Salfredpthread_mutex_t xprtlist_lock = PTHREAD_MUTEX_INITIALIZER; 8074462Salfred 8174462Salfred#undef rpc_createerr 8274462Salfred 8374462Salfredstruct rpc_createerr rpc_createerr; 84204950Sjhbstatic thread_key_t rce_key; 85204950Sjhbstatic once_t rce_once = ONCE_INITIALIZER; 86204950Sjhbstatic int rce_key_error; 8774462Salfred 88204950Sjhbstatic void 89204950Sjhbrce_key_init(void) 90204950Sjhb{ 91204950Sjhb 92204950Sjhb rce_key_error = thr_keycreate(&rce_key, free); 93204950Sjhb} 94204950Sjhb 9574462Salfredstruct rpc_createerr * 9674462Salfred__rpc_createerr() 9774462Salfred{ 9874462Salfred struct rpc_createerr *rce_addr = 0; 9974462Salfred 10074462Salfred if (thr_main()) 10174462Salfred return (&rpc_createerr); 102204950Sjhb if (thr_once(&rce_once, rce_key_init) != 0 || rce_key_error != 0) 103204950Sjhb return (&rpc_createerr); 104204950Sjhb rce_addr = (struct rpc_createerr *)thr_getspecific(rce_key); 10574462Salfred if (!rce_addr) { 10674462Salfred rce_addr = (struct rpc_createerr *) 10774462Salfred malloc(sizeof (struct rpc_createerr)); 10874462Salfred if (thr_setspecific(rce_key, (void *) rce_addr) != 0) { 10974462Salfred if (rce_addr) 11074462Salfred free(rce_addr); 11174462Salfred return (&rpc_createerr); 11274462Salfred } 11374462Salfred memset(rce_addr, 0, sizeof (struct rpc_createerr)); 11474462Salfred return (rce_addr); 11574462Salfred } 11674462Salfred return (rce_addr); 11774462Salfred} 118