Index: mozilla/security/nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_lifecycle.c |
=================================================================== |
--- mozilla/security/nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_lifecycle.c (revision 191424) |
+++ mozilla/security/nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_lifecycle.c (working copy) |
@@ -1,271 +0,0 @@ |
-/* This Source Code Form is subject to the terms of the Mozilla Public |
- * License, v. 2.0. If a copy of the MPL was not distributed with this |
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
-/* |
- * pkix_pl_lifecycle.c |
- * |
- * Lifecycle Functions for the PKIX PL library. |
- * |
- */ |
- |
-#include "pkix_pl_lifecycle.h" |
- |
-PKIX_Boolean pkix_pl_initialized = PKIX_FALSE; |
-pkix_ClassTable_Entry systemClasses[PKIX_NUMTYPES]; |
-PRLock *classTableLock; |
-PRLogModuleInfo *pkixLog = NULL; |
- |
-/* |
- * PKIX_ALLOC_ERROR is a special error object hard-coded into the |
- * pkix_error.o object file. It is thrown if system memory cannot be |
- * allocated. PKIX_ALLOC_ERROR is immutable. |
- * IncRef, DecRef, and Settor functions cannot be called. |
- */ |
- |
-/* Keep this structure definition here for its is used only once here */ |
-struct PKIX_Alloc_Error_ObjectStruct { |
- PKIX_PL_Object header; |
- PKIX_Error error; |
-}; |
-typedef struct PKIX_Alloc_Error_ObjectStruct PKIX_Alloc_Error_Object; |
- |
-static const PKIX_Alloc_Error_Object pkix_Alloc_Error_Data = { |
- { |
- PKIX_MAGIC_HEADER, /* PRUint64 magicHeader */ |
- (PKIX_UInt32)PKIX_ERROR_TYPE, /* PKIX_UInt32 type */ |
- (PKIX_UInt32)1, /* PKIX_UInt32 references */ |
- /* Warning! Cannot Ref Count with NULL lock */ |
- (void *)0, /* PRLock *lock */ |
- (PKIX_PL_String *)0, /* PKIX_PL_String *stringRep */ |
- (PKIX_UInt32)0, /* PKIX_UInt32 hashcode */ |
- (PKIX_Boolean)PKIX_FALSE, /* PKIX_Boolean hashcodeCached */ |
- }, { |
- (PKIX_ERRORCODE)0, /* PKIX_ERRORCODE errCode; */ |
- (PKIX_ERRORCLASS)PKIX_FATAL_ERROR,/* PKIX_ERRORCLASS errClass */ |
- (PKIX_UInt32)SEC_ERROR_LIBPKIX_INTERNAL, /* default PL Error Code */ |
- (PKIX_Error *)0, /* PKIX_Error *cause */ |
- (PKIX_PL_Object *)0, /* PKIX_PL_Object *info */ |
- } |
-}; |
- |
-PKIX_Error* PKIX_ALLOC_ERROR(void) |
-{ |
- return (PKIX_Error *)&pkix_Alloc_Error_Data.error; |
-} |
- |
-#ifdef PKIX_OBJECT_LEAK_TEST |
-SECStatus |
-pkix_pl_lifecycle_ObjectTableUpdate(int *objCountTable) |
-{ |
- int typeCounter = 0; |
- |
- for (; typeCounter < PKIX_NUMTYPES; typeCounter++) { |
- pkix_ClassTable_Entry *entry = &systemClasses[typeCounter]; |
- |
- objCountTable[typeCounter] = entry->objCounter; |
- } |
- |
- return SECSuccess; |
-} |
-#endif /* PKIX_OBJECT_LEAK_TEST */ |
- |
- |
-PKIX_UInt32 |
-pkix_pl_lifecycle_ObjectLeakCheck(int *initObjCountTable) |
-{ |
- int typeCounter = 0; |
- PKIX_UInt32 numObjects = 0; |
- char classNameBuff[128]; |
- char *className = NULL; |
- |
- for (; typeCounter < PKIX_NUMTYPES; typeCounter++) { |
- pkix_ClassTable_Entry *entry = &systemClasses[typeCounter]; |
- PKIX_UInt32 objCountDiff = entry->objCounter; |
- |
- if (initObjCountTable) { |
- PKIX_UInt32 initialCount = initObjCountTable[typeCounter]; |
- objCountDiff = (entry->objCounter > initialCount) ? |
- entry->objCounter - initialCount : 0; |
- } |
- |
- numObjects += objCountDiff; |
- |
- if (!pkixLog || !objCountDiff) { |
- continue; |
- } |
- className = entry->description; |
- if (!className) { |
- className = classNameBuff; |
- PR_snprintf(className, 128, "Unknown(ref %d)", |
- entry->objCounter); |
- } |
- |
- PR_LOG(pkixLog, 1, ("Class %s leaked %d objects of " |
- "size %d bytes, total = %d bytes\n", className, |
- objCountDiff, entry->typeObjectSize, |
- objCountDiff * entry->typeObjectSize)); |
- } |
- |
- return numObjects; |
-} |
- |
-/* |
- * PKIX_PL_Initialize (see comments in pkix_pl_system.h) |
- */ |
-PKIX_Error * |
-PKIX_PL_Initialize( |
- PKIX_Boolean platformInitNeeded, |
- PKIX_Boolean useArenas, |
- void **pPlContext) |
-{ |
- void *plContext = NULL; |
- |
- PKIX_ENTER(OBJECT, "PKIX_PL_Initialize"); |
- |
- /* |
- * This function can only be called once. If it has already been |
- * called, we return a positive status. |
- */ |
- if (pkix_pl_initialized) { |
- PKIX_RETURN(OBJECT); |
- } |
- |
- classTableLock = PR_NewLock(); |
- if (classTableLock == NULL) { |
- return PKIX_ALLOC_ERROR(); |
- } |
- |
- if (PR_GetEnv("NSS_STRICT_SHUTDOWN")) { |
- pkixLog = PR_NewLogModule("pkix"); |
- } |
- /* |
- * Register Object, it is the base object of all other objects. |
- */ |
- pkix_pl_Object_RegisterSelf(plContext); |
- |
- /* |
- * Register Error and String, since they will be needed if |
- * there is a problem in registering any other type. |
- */ |
- pkix_Error_RegisterSelf(plContext); |
- pkix_pl_String_RegisterSelf(plContext); |
- |
- |
- /* |
- * We register all other system types |
- * (They don't need to be in order, but it's |
- * easier to keep track of what types are registered |
- * if we register them in the same order as their |
- * numbers, defined in pkixt.h. |
- */ |
- pkix_pl_BigInt_RegisterSelf(plContext); /* 1-10 */ |
- pkix_pl_ByteArray_RegisterSelf(plContext); |
- pkix_pl_HashTable_RegisterSelf(plContext); |
- pkix_List_RegisterSelf(plContext); |
- pkix_Logger_RegisterSelf(plContext); |
- pkix_pl_Mutex_RegisterSelf(plContext); |
- pkix_pl_OID_RegisterSelf(plContext); |
- pkix_pl_RWLock_RegisterSelf(plContext); |
- |
- pkix_pl_CertBasicConstraints_RegisterSelf(plContext); /* 11-20 */ |
- pkix_pl_Cert_RegisterSelf(plContext); |
- pkix_pl_CRL_RegisterSelf(plContext); |
- pkix_pl_CRLEntry_RegisterSelf(plContext); |
- pkix_pl_Date_RegisterSelf(plContext); |
- pkix_pl_GeneralName_RegisterSelf(plContext); |
- pkix_pl_CertNameConstraints_RegisterSelf(plContext); |
- pkix_pl_PublicKey_RegisterSelf(plContext); |
- pkix_TrustAnchor_RegisterSelf(plContext); |
- |
- pkix_pl_X500Name_RegisterSelf(plContext); /* 21-30 */ |
- pkix_pl_HttpCertStoreContext_RegisterSelf(plContext); |
- pkix_BuildResult_RegisterSelf(plContext); |
- pkix_ProcessingParams_RegisterSelf(plContext); |
- pkix_ValidateParams_RegisterSelf(plContext); |
- pkix_ValidateResult_RegisterSelf(plContext); |
- pkix_CertStore_RegisterSelf(plContext); |
- pkix_CertChainChecker_RegisterSelf(plContext); |
- pkix_RevocationChecker_RegisterSelf(plContext); |
- pkix_CertSelector_RegisterSelf(plContext); |
- |
- pkix_ComCertSelParams_RegisterSelf(plContext); /* 31-40 */ |
- pkix_CRLSelector_RegisterSelf(plContext); |
- pkix_ComCRLSelParams_RegisterSelf(plContext); |
- pkix_pl_CertPolicyInfo_RegisterSelf(plContext); |
- pkix_pl_CertPolicyQualifier_RegisterSelf(plContext); |
- pkix_pl_CertPolicyMap_RegisterSelf(plContext); |
- pkix_PolicyNode_RegisterSelf(plContext); |
- pkix_TargetCertCheckerState_RegisterSelf(plContext); |
- pkix_BasicConstraintsCheckerState_RegisterSelf(plContext); |
- pkix_PolicyCheckerState_RegisterSelf(plContext); |
- |
- pkix_pl_CollectionCertStoreContext_RegisterSelf(plContext); /* 41-50 */ |
- pkix_CrlChecker_RegisterSelf(plContext); |
- pkix_ForwardBuilderState_RegisterSelf(plContext); |
- pkix_SignatureCheckerState_RegisterSelf(plContext); |
- pkix_NameConstraintsCheckerState_RegisterSelf(plContext); |
- pkix_pl_LdapRequest_RegisterSelf(plContext); |
- pkix_pl_LdapResponse_RegisterSelf(plContext); |
- pkix_pl_LdapDefaultClient_RegisterSelf(plContext); |
- pkix_pl_Socket_RegisterSelf(plContext); |
- |
- pkix_ResourceLimits_RegisterSelf(plContext); /* 51-59 */ |
- pkix_pl_MonitorLock_RegisterSelf(plContext); |
- pkix_pl_InfoAccess_RegisterSelf(plContext); |
- pkix_pl_AIAMgr_RegisterSelf(plContext); |
- pkix_OcspChecker_RegisterSelf(plContext); |
- pkix_pl_OcspCertID_RegisterSelf(plContext); |
- pkix_pl_OcspRequest_RegisterSelf(plContext); |
- pkix_pl_OcspResponse_RegisterSelf(plContext); |
- pkix_pl_HttpDefaultClient_RegisterSelf(plContext); |
- pkix_VerifyNode_RegisterSelf(plContext); |
- pkix_EkuChecker_RegisterSelf(plContext); |
- pkix_pl_CrlDp_RegisterSelf(plContext); |
- |
- if (pPlContext) { |
- PKIX_CHECK(PKIX_PL_NssContext_Create |
- (0, useArenas, NULL, &plContext), |
- PKIX_NSSCONTEXTCREATEFAILED); |
- |
- *pPlContext = plContext; |
- } |
- |
- pkix_pl_initialized = PKIX_TRUE; |
- |
-cleanup: |
- |
- PKIX_RETURN(OBJECT); |
-} |
- |
-/* |
- * PKIX_PL_Shutdown (see comments in pkix_pl_system.h) |
- */ |
-PKIX_Error * |
-PKIX_PL_Shutdown(void *plContext) |
-{ |
- PKIX_UInt32 numLeakedObjects = 0; |
- |
- PKIX_ENTER(OBJECT, "PKIX_PL_Shutdown"); |
- |
- if (!pkix_pl_initialized) { |
- /* The library was not initilized */ |
- PKIX_RETURN(OBJECT); |
- } |
- |
- PR_DestroyLock(classTableLock); |
- |
- pkix_pl_HttpCertStore_Shutdown(plContext); |
- |
- numLeakedObjects = pkix_pl_lifecycle_ObjectLeakCheck(NULL); |
- if (PR_GetEnv("NSS_STRICT_SHUTDOWN")) { |
- PORT_Assert(numLeakedObjects == 0); |
- } |
- |
- if (plContext != NULL) { |
- PKIX_PL_NssContext_Destroy(plContext); |
- } |
- |
- pkix_pl_initialized = PKIX_FALSE; |
- |
- PKIX_RETURN(OBJECT); |
-} |