source: rtems-libbsd/freebsd/lib/libc/rpc/mt_misc.c @ f41a394

55-freebsd-126-freebsd-12freebsd-9.3
Last change on this file since f41a394 was 60b1d40, checked in by Sebastian Huber <sebastian.huber@…>, on 06/09/16 at 08:23:57

RPC(3): Import from FreeBSD

  • Property mode set to 100644
File size: 3.3 KB
Line 
1#include <machine/rtems-bsd-user-space.h>
2
3/*      $NetBSD: mt_misc.c,v 1.1 2000/06/02 23:11:11 fvdl Exp $ */
4
5/* #pragma ident        "@(#)mt_misc.c  1.24    93/04/29 SMI" */
6#include <sys/cdefs.h>
7__FBSDID("$FreeBSD$");
8
9#include "namespace.h"
10#include "reentrant.h"
11#include <rpc/rpc.h>
12#include <sys/time.h>
13#include <stdlib.h>
14#include <string.h>
15#include "un-namespace.h"
16#include "mt_misc.h"
17
18/* Take these objects out of the application namespace. */
19#define svc_lock                __svc_lock
20#define svc_fd_lock             __svc_fd_lock
21#define rpcbaddr_cache_lock     __rpcbaddr_cache_lock
22#define authdes_ops_lock        __authdes_ops_lock
23#define authnone_lock           __authnone_lock
24#define authsvc_lock            __authsvc_lock
25#define clnt_fd_lock            __clnt_fd_lock
26#define clntraw_lock            __clntraw_lock
27#define dupreq_lock             __dupreq_lock
28#define loopnconf_lock          __loopnconf_lock
29#define ops_lock                __ops_lock
30#define proglst_lock            __proglst_lock
31#define rpcsoc_lock             __rpcsoc_lock
32#define svcraw_lock             __svcraw_lock
33#define xprtlist_lock           __xprtlist_lock
34
35/* protects the services list (svc.c) */
36pthread_rwlock_t        svc_lock = PTHREAD_RWLOCK_INITIALIZER;
37
38/* protects svc_fdset and the xports[] array */
39pthread_rwlock_t        svc_fd_lock = PTHREAD_RWLOCK_INITIALIZER;
40
41/* protects the RPCBIND address cache */
42pthread_rwlock_t        rpcbaddr_cache_lock = PTHREAD_RWLOCK_INITIALIZER;
43
44/* serializes authdes ops initializations */
45pthread_mutex_t authdes_ops_lock = PTHREAD_MUTEX_INITIALIZER;
46
47/* protects des stats list */
48pthread_mutex_t svcauthdesstats_lock = PTHREAD_MUTEX_INITIALIZER;
49
50/* auth_none.c serialization */
51pthread_mutex_t authnone_lock = PTHREAD_MUTEX_INITIALIZER;
52
53/* protects the Auths list (svc_auth.c) */
54pthread_mutex_t authsvc_lock = PTHREAD_MUTEX_INITIALIZER;
55
56/* protects client-side fd lock array */
57pthread_mutex_t clnt_fd_lock = PTHREAD_MUTEX_INITIALIZER;
58
59/* clnt_raw.c serialization */
60pthread_mutex_t clntraw_lock = PTHREAD_MUTEX_INITIALIZER;
61
62/* dupreq variables (svc_dg.c) */
63pthread_mutex_t dupreq_lock = PTHREAD_MUTEX_INITIALIZER;
64
65/* loopnconf (rpcb_clnt.c) */
66pthread_mutex_t loopnconf_lock = PTHREAD_MUTEX_INITIALIZER;
67
68/* serializes ops initializations */
69pthread_mutex_t ops_lock = PTHREAD_MUTEX_INITIALIZER;
70
71/* protects proglst list (svc_simple.c) */
72pthread_mutex_t proglst_lock = PTHREAD_MUTEX_INITIALIZER;
73
74/* serializes clnt_com_create() (rpc_soc.c) */
75pthread_mutex_t rpcsoc_lock = PTHREAD_MUTEX_INITIALIZER;
76
77/* svc_raw.c serialization */
78pthread_mutex_t svcraw_lock = PTHREAD_MUTEX_INITIALIZER;
79
80/* xprtlist (svc_generic.c) */
81pthread_mutex_t xprtlist_lock = PTHREAD_MUTEX_INITIALIZER;
82
83#undef  rpc_createerr
84
85struct rpc_createerr rpc_createerr;
86static thread_key_t rce_key;
87static once_t rce_once = ONCE_INITIALIZER;
88static int rce_key_error;
89
90static void
91rce_key_init(void)
92{
93
94        rce_key_error = thr_keycreate(&rce_key, free);
95}
96
97struct rpc_createerr *
98__rpc_createerr()
99{
100        struct rpc_createerr *rce_addr = 0;
101
102        if (thr_main())
103                return (&rpc_createerr);
104        if (thr_once(&rce_once, rce_key_init) != 0 || rce_key_error != 0)
105                return (&rpc_createerr);
106        rce_addr = (struct rpc_createerr *)thr_getspecific(rce_key);
107        if (!rce_addr) {
108                rce_addr = (struct rpc_createerr *)
109                        malloc(sizeof (struct rpc_createerr));
110                if (thr_setspecific(rce_key, (void *) rce_addr) != 0) {
111                        if (rce_addr)
112                                free(rce_addr);
113                        return (&rpc_createerr);
114                }
115                memset(rce_addr, 0, sizeof (struct rpc_createerr));
116                return (rce_addr);
117        }
118        return (rce_addr);
119}
Note: See TracBrowser for help on using the repository browser.