|  | /* | 
|  | * (c) Copyright 1990-1996 OPEN SOFTWARE FOUNDATION, INC. | 
|  | * (c) Copyright 1990-1996 HEWLETT-PACKARD COMPANY | 
|  | * (c) Copyright 1990-1996 DIGITAL EQUIPMENT CORPORATION | 
|  | * (c) Copyright 1991, 1992 Siemens-Nixdorf Information Systems | 
|  | * To anyone who acknowledges that this file is provided "AS IS" without | 
|  | * any express or implied warranty: permission to use, copy, modify, and | 
|  | * distribute this file for any purpose is hereby granted without fee, | 
|  | * provided that the above copyright notices and this notice appears in | 
|  | * all source code copies, and that none of the names listed above be used | 
|  | * in advertising or publicity pertaining to distribution of the software | 
|  | * without specific, written prior permission.  None of these organizations | 
|  | * makes any representations about the suitability of this software for | 
|  | * any purpose. | 
|  | */ | 
|  | /* | 
|  | *	Header file for CMA initialization | 
|  | */ | 
|  |  | 
|  | #ifndef CMA_INIT | 
|  | #define CMA_INIT | 
|  |  | 
|  | /* | 
|  | *  INCLUDE FILES | 
|  | */ | 
|  | #include <dce/cma_host.h> | 
|  | #include <cma_errors.h> | 
|  |  | 
|  | /* | 
|  | * CONSTANTS AND MACROS | 
|  | */ | 
|  |  | 
|  | #define cma__c_env_maxattr	0 | 
|  | #define cma__c_env_minattr	1 | 
|  | #define cma__c_env_maxcond	2 | 
|  | #define	cma__c_env_mincond	3 | 
|  | #define cma__c_env_maxmutex	4 | 
|  | #define cma__c_env_minmutex	5 | 
|  | #define cma__c_env_maxthread	6 | 
|  | #define cma__c_env_minthread	7 | 
|  | #define cma__c_env_maxcluster	8 | 
|  | #define cma__c_env_mincluster	9 | 
|  | #define cma__c_env_maxvp	10 | 
|  | #define cma__c_env_multiplex	11 | 
|  | #define cma__c_env_trace	12 | 
|  | #define cma__c_env_trace_file	13 | 
|  |  | 
|  | #define cma__c_env_count	13 | 
|  |  | 
|  |  | 
|  | /* | 
|  | * cma__int_init | 
|  | * | 
|  | * Initialize the main body of CMA exactly once. | 
|  | * | 
|  | * We raise an exception if, for some odd reason, there are already threads | 
|  | * in the environment (e.g. kernel threads), and one of them is trying to | 
|  | * initialize CMA before the  first thread got all the way through the actual | 
|  | * initialization. This code maintains the invariants: "after successfully | 
|  | * calling CMA_INIT, you can call any CMA function", and  "CMA is actually | 
|  | * initialized at most once". | 
|  | */ | 
|  | /*#ifndef _HP_LIBC_R */ | 
|  |  | 
|  | #if  defined _HP_LIBC_R  ||(defined(SNI_SVR4) && !defined(CMA_INIT_NEEDED)) | 
|  | # define cma__int_init() | 
|  | #else | 
|  | # define cma__int_init() { \ | 
|  | if (!cma__tac_isset(&cma__g_init_started)) { \ | 
|  | if (!cma__test_and_set (&cma__g_init_started)) { \ | 
|  | cma__init_static (); \ | 
|  | cma__test_and_set (&cma__g_init_done); \ | 
|  | } \ | 
|  | else if (!cma__tac_isset (&cma__g_init_done)) { \ | 
|  | cma__error (cma_s_inialrpro); \ | 
|  | }}} | 
|  | #endif | 
|  |  | 
|  | /* | 
|  | * TYPEDEFS | 
|  | */ | 
|  |  | 
|  | typedef enum CMA__T_ENV_TYPE { | 
|  | cma__c_env_type_int, | 
|  | cma__c_env_type_file | 
|  | } cma__t_env_type; | 
|  |  | 
|  | typedef struct CMA__T_ENV { | 
|  | char		*name;		/* Name of environment variable */ | 
|  | cma__t_env_type	type;		/* Type of variable */ | 
|  | cma_t_integer	value;		/* Numeric value of the variable */ | 
|  | } cma__t_env; | 
|  |  | 
|  | /* | 
|  | *  GLOBAL DATA | 
|  | */ | 
|  |  | 
|  | extern cma__t_env		cma__g_env[cma__c_env_count]; | 
|  | extern cma__t_atomic_bit	cma__g_init_started; | 
|  | extern cma__t_atomic_bit	cma__g_init_done; | 
|  | extern char			*cma__g_version; | 
|  |  | 
|  | /* | 
|  | * INTERNAL INTERFACES | 
|  | */ | 
|  |  | 
|  | extern void | 
|  | cma__init_static (void);	/* Initialize static data */ | 
|  |  | 
|  | #if _CMA_OS_ != _CMA__VMS | 
|  | extern void cma__init_atfork (void); | 
|  | #endif | 
|  |  | 
|  | #endif |