Commit | Line | Data |
---|---|---|
c906108c SS |
1 | /* |
2 | * (c) Copyright 1990-1996 OPEN SOFTWARE FOUNDATION, INC. | |
3 | * (c) Copyright 1990-1996 HEWLETT-PACKARD COMPANY | |
4 | * (c) Copyright 1990-1996 DIGITAL EQUIPMENT CORPORATION | |
5 | * (c) Copyright 1991, 1992 Siemens-Nixdorf Information Systems | |
6 | * To anyone who acknowledges that this file is provided "AS IS" without | |
7 | * any express or implied warranty: permission to use, copy, modify, and | |
8 | * distribute this file for any purpose is hereby granted without fee, | |
9 | * provided that the above copyright notices and this notice appears in | |
10 | * all source code copies, and that none of the names listed above be used | |
11 | * in advertising or publicity pertaining to distribution of the software | |
12 | * without specific, written prior permission. None of these organizations | |
13 | * makes any representations about the suitability of this software for | |
14 | * any purpose. | |
15 | */ | |
16 | /* | |
17 | * Header file for CMA initialization | |
18 | */ | |
19 | ||
20 | #ifndef CMA_INIT | |
21 | #define CMA_INIT | |
22 | ||
23 | /* | |
24 | * INCLUDE FILES | |
25 | */ | |
26 | #include <dce/cma_host.h> | |
27 | #include <cma_errors.h> | |
28 | ||
29 | /* | |
30 | * CONSTANTS AND MACROS | |
31 | */ | |
32 | ||
33 | #define cma__c_env_maxattr 0 | |
34 | #define cma__c_env_minattr 1 | |
35 | #define cma__c_env_maxcond 2 | |
36 | #define cma__c_env_mincond 3 | |
37 | #define cma__c_env_maxmutex 4 | |
38 | #define cma__c_env_minmutex 5 | |
39 | #define cma__c_env_maxthread 6 | |
40 | #define cma__c_env_minthread 7 | |
41 | #define cma__c_env_maxcluster 8 | |
42 | #define cma__c_env_mincluster 9 | |
43 | #define cma__c_env_maxvp 10 | |
44 | #define cma__c_env_multiplex 11 | |
45 | #define cma__c_env_trace 12 | |
46 | #define cma__c_env_trace_file 13 | |
47 | ||
48 | #define cma__c_env_count 13 | |
49 | ||
50 | ||
51 | /* | |
52 | * cma__int_init | |
53 | * | |
54 | * Initialize the main body of CMA exactly once. | |
55 | * | |
56 | * We raise an exception if, for some odd reason, there are already threads | |
57 | * in the environment (e.g. kernel threads), and one of them is trying to | |
58 | * initialize CMA before the first thread got all the way through the actual | |
59 | * initialization. This code maintains the invariants: "after successfully | |
60 | * calling CMA_INIT, you can call any CMA function", and "CMA is actually | |
61 | * initialized at most once". | |
62 | */ | |
63 | /*#ifndef _HP_LIBC_R */ | |
64 | ||
65 | #if defined _HP_LIBC_R ||(defined(SNI_SVR4) && !defined(CMA_INIT_NEEDED)) | |
66 | # define cma__int_init() | |
67 | #else | |
68 | # define cma__int_init() { \ | |
69 | if (!cma__tac_isset(&cma__g_init_started)) { \ | |
70 | if (!cma__test_and_set (&cma__g_init_started)) { \ | |
71 | cma__init_static (); \ | |
72 | cma__test_and_set (&cma__g_init_done); \ | |
73 | } \ | |
74 | else if (!cma__tac_isset (&cma__g_init_done)) { \ | |
75 | cma__error (cma_s_inialrpro); \ | |
76 | }}} | |
77 | #endif | |
78 | ||
79 | /* | |
80 | * TYPEDEFS | |
81 | */ | |
82 | ||
83 | typedef enum CMA__T_ENV_TYPE { | |
84 | cma__c_env_type_int, | |
85 | cma__c_env_type_file | |
86 | } cma__t_env_type; | |
87 | ||
88 | typedef struct CMA__T_ENV { | |
89 | char *name; /* Name of environment variable */ | |
90 | cma__t_env_type type; /* Type of variable */ | |
91 | cma_t_integer value; /* Numeric value of the variable */ | |
92 | } cma__t_env; | |
93 | ||
94 | /* | |
95 | * GLOBAL DATA | |
96 | */ | |
97 | ||
98 | extern cma__t_env cma__g_env[cma__c_env_count]; | |
99 | extern cma__t_atomic_bit cma__g_init_started; | |
100 | extern cma__t_atomic_bit cma__g_init_done; | |
101 | extern char *cma__g_version; | |
102 | ||
103 | /* | |
104 | * INTERNAL INTERFACES | |
105 | */ | |
106 | ||
107 | extern void | |
108 | cma__init_static (void); /* Initialize static data */ | |
109 | ||
110 | #if _CMA_OS_ != _CMA__VMS | |
111 | extern void cma__init_atfork (void); | |
112 | #endif | |
113 | ||
114 | #endif |