зеркало из https://github.com/mozilla/gecko-dev.git
Bug 194222: Removed SECMOD_CallOnce. It is replaced by the new NSPR 4.3
function PR_CallOnceWithArg. Modified files: nss/nssinit.c pk11wrap/pk11cert.c pk11wrap/secmodi.h
This commit is contained in:
Родитель
1f84533442
Коммит
0cf4cab50e
|
@ -32,7 +32,7 @@
|
|||
* may use your version of this file under either the MPL or the
|
||||
* GPL.
|
||||
*
|
||||
# $Id: nssinit.c,v 1.60 2003/01/08 21:48:40 wtc%netscape.com Exp $
|
||||
# $Id: nssinit.c,v 1.61 2003/02/20 16:58:53 wtc%netscape.com Exp $
|
||||
*/
|
||||
|
||||
#include <ctype.h>
|
||||
|
@ -481,7 +481,6 @@ loser:
|
|||
#endif
|
||||
pk11sdr_Init();
|
||||
cert_CreateSubjectKeyIDHashTable();
|
||||
SECMOD_InitCallOnce();
|
||||
nss_IsInitted = PR_TRUE;
|
||||
}
|
||||
return rv;
|
||||
|
@ -555,7 +554,6 @@ NSS_Shutdown(void)
|
|||
SECOID_Shutdown();
|
||||
status = STAN_Shutdown();
|
||||
cert_DestroySubjectKeyIDHashTable();
|
||||
SECMOD_CleanupCallOnce();
|
||||
rv = SECMOD_Shutdown();
|
||||
pk11sdr_Shutdown();
|
||||
if (status == PR_FAILURE) {
|
||||
|
|
|
@ -2341,9 +2341,9 @@ loser:
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static SECMODCallOnceType keyIDHashCallOnce;
|
||||
static PRCallOnceType keyIDHashCallOnce;
|
||||
|
||||
static SECStatus PR_CALLBACK
|
||||
static PRStatus PR_CALLBACK
|
||||
pk11_keyIDHash_populate(void *wincx)
|
||||
{
|
||||
CERTCertList *certList;
|
||||
|
@ -2352,7 +2352,7 @@ pk11_keyIDHash_populate(void *wincx)
|
|||
|
||||
certList = PK11_ListCerts(PK11CertListUser, wincx);
|
||||
if (!certList) {
|
||||
return SECFailure;
|
||||
return PR_FAILURE;
|
||||
}
|
||||
|
||||
for (node = CERT_LIST_HEAD(certList);
|
||||
|
@ -2366,7 +2366,7 @@ pk11_keyIDHash_populate(void *wincx)
|
|||
}
|
||||
}
|
||||
CERT_DestroyCertList(certList);
|
||||
return SECSuccess;
|
||||
return PR_SUCCESS;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -2379,11 +2379,11 @@ PK11_FindCertAndKeyByRecipientListNew(NSSCMSRecipient **recipientlist, void *win
|
|||
{
|
||||
CERTCertificate *cert;
|
||||
NSSCMSRecipient *rl;
|
||||
SECStatus srv;
|
||||
PRStatus rv;
|
||||
int rlIndex;
|
||||
|
||||
srv = SECMOD_CallOnce(&keyIDHashCallOnce, pk11_keyIDHash_populate, wincx);
|
||||
if (srv != SECSuccess)
|
||||
rv = PR_CallOnceWithArg(&keyIDHashCallOnce, pk11_keyIDHash_populate, wincx);
|
||||
if (rv != PR_SUCCESS)
|
||||
return -1;
|
||||
|
||||
cert = pk11_AllFindCertObjectByRecipientNew(recipientlist, wincx, &rlIndex);
|
||||
|
@ -4156,54 +4156,3 @@ CERTSignedCrl* PK11_ImportCRL(PK11SlotInfo * slot, SECItem *derCRL, char *url,
|
|||
}
|
||||
return (crl);
|
||||
}
|
||||
|
||||
/*
|
||||
* This code takes the NSPR CallOnce functionality and modifies it so
|
||||
* that we can pass an argument to our function
|
||||
*/
|
||||
static struct {
|
||||
PRLock *ml;
|
||||
PRCondVar *cv;
|
||||
} mod_init;
|
||||
|
||||
void SECMOD_InitCallOnce(void) {
|
||||
mod_init.ml = PR_NewLock();
|
||||
PORT_Assert(NULL != mod_init.ml);
|
||||
mod_init.cv = PR_NewCondVar(mod_init.ml);
|
||||
PORT_Assert(NULL != mod_init.cv);
|
||||
}
|
||||
|
||||
void SECMOD_CleanupCallOnce(void)
|
||||
{
|
||||
if (mod_init.ml) {
|
||||
PR_DestroyLock(mod_init.ml);
|
||||
mod_init.ml = NULL;
|
||||
}
|
||||
if (mod_init.cv) {
|
||||
PR_DestroyCondVar(mod_init.cv);
|
||||
mod_init.cv = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
SECStatus SECMOD_CallOnce(SECMODCallOnceType *once,
|
||||
SECMODCallOnceFN func,
|
||||
void *arg)
|
||||
{
|
||||
|
||||
if (!once->initialized) {
|
||||
if (PR_AtomicSet(&once->inProgress, 1) == 0) {
|
||||
once->status = (PRStatus)(*func)(arg);
|
||||
PR_Lock(mod_init.ml);
|
||||
once->initialized = 1;
|
||||
PR_NotifyAllCondVar(mod_init.cv);
|
||||
PR_Unlock(mod_init.ml);
|
||||
} else {
|
||||
PR_Lock(mod_init.ml);
|
||||
while (!once->initialized) {
|
||||
PR_WaitCondVar(mod_init.cv, PR_INTERVAL_NO_TIMEOUT);
|
||||
}
|
||||
PR_Unlock(mod_init.ml);
|
||||
}
|
||||
}
|
||||
return once->status;
|
||||
}
|
||||
|
|
|
@ -111,22 +111,6 @@ SECStatus PBE_PK11ParamToAlgid(SECOidTag algTag, SECItem *param,
|
|||
extern void pk11sdr_Init(void);
|
||||
extern void pk11sdr_Shutdown(void);
|
||||
|
||||
typedef struct SECMODCallOnceType {
|
||||
PRIntn initialized;
|
||||
PRInt32 inProgress;
|
||||
SECStatus status;
|
||||
} SECMODCallOnceType;
|
||||
|
||||
typedef SECStatus (PR_CALLBACK *SECMODCallOnceFN)(void *arg);
|
||||
|
||||
extern void SECMOD_InitCallOnce(void);
|
||||
|
||||
extern SECStatus SECMOD_CallOnce(SECMODCallOnceType *once,
|
||||
SECMODCallOnceFN func,
|
||||
void *arg);
|
||||
|
||||
extern void SECMOD_CleanupCallOnce(void);
|
||||
|
||||
SEC_END_PROTOS
|
||||
|
||||
#endif
|
||||
|
|
Загрузка…
Ссылка в новой задаче