| Index: mozilla/security/nss/lib/ckfw/mutex.c
 | 
| ===================================================================
 | 
| --- mozilla/security/nss/lib/ckfw/mutex.c	(revision 191424)
 | 
| +++ mozilla/security/nss/lib/ckfw/mutex.c	(working copy)
 | 
| @@ -1,273 +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/. */
 | 
| -
 | 
| -#ifdef DEBUG
 | 
| -static const char CVS_ID[] = "@(#) $RCSfile: mutex.c,v $ $Revision: 1.10 $ $Date: 2012/04/25 14:49:28 $";
 | 
| -#endif /* DEBUG */
 | 
| -
 | 
| -/*
 | 
| - * mutex.c
 | 
| - *
 | 
| - * This file implements a mutual-exclusion locking facility for Modules
 | 
| - * using the NSS Cryptoki Framework.
 | 
| - */
 | 
| -
 | 
| -#ifndef CK_T
 | 
| -#include "ck.h"
 | 
| -#endif /* CK_T */
 | 
| -
 | 
| -/*
 | 
| - * NSSCKFWMutex
 | 
| - *
 | 
| - *  NSSCKFWMutex_Destroy
 | 
| - *  NSSCKFWMutex_Lock
 | 
| - *  NSSCKFWMutex_Unlock
 | 
| - *
 | 
| - *  nssCKFWMutex_Create
 | 
| - *  nssCKFWMutex_Destroy
 | 
| - *  nssCKFWMutex_Lock
 | 
| - *  nssCKFWMutex_Unlock
 | 
| - *
 | 
| - *  -- debugging versions only --
 | 
| - *  nssCKFWMutex_verifyPointer
 | 
| - *
 | 
| - */
 | 
| -
 | 
| -struct NSSCKFWMutexStr {
 | 
| -  PRLock *lock;
 | 
| -};
 | 
| -
 | 
| -#ifdef DEBUG
 | 
| -/*
 | 
| - * But first, the pointer-tracking stuff.
 | 
| - *
 | 
| - * NOTE: the pointer-tracking support in NSS/base currently relies
 | 
| - * upon NSPR's CallOnce support.  That, however, relies upon NSPR's
 | 
| - * locking, which is tied into the runtime.  We need a pointer-tracker
 | 
| - * implementation that uses the locks supplied through C_Initialize.
 | 
| - * That support, however, can be filled in later.  So for now, I'll
 | 
| - * just do this routines as no-ops.
 | 
| - */
 | 
| -
 | 
| -static CK_RV
 | 
| -mutex_add_pointer
 | 
| -(
 | 
| -  const NSSCKFWMutex *fwMutex
 | 
| -)
 | 
| -{
 | 
| -  return CKR_OK;
 | 
| -}
 | 
| -
 | 
| -static CK_RV
 | 
| -mutex_remove_pointer
 | 
| -(
 | 
| -  const NSSCKFWMutex *fwMutex
 | 
| -)
 | 
| -{
 | 
| -  return CKR_OK;
 | 
| -}
 | 
| -
 | 
| -NSS_IMPLEMENT CK_RV
 | 
| -nssCKFWMutex_verifyPointer
 | 
| -(
 | 
| -  const NSSCKFWMutex *fwMutex
 | 
| -)
 | 
| -{
 | 
| -  return CKR_OK;
 | 
| -}
 | 
| -
 | 
| -#endif /* DEBUG */
 | 
| -
 | 
| -/*
 | 
| - * nssCKFWMutex_Create
 | 
| - *
 | 
| - */
 | 
| -NSS_EXTERN NSSCKFWMutex *
 | 
| -nssCKFWMutex_Create
 | 
| -(
 | 
| -  CK_C_INITIALIZE_ARGS_PTR pInitArgs,
 | 
| -  CryptokiLockingState LockingState,
 | 
| -  NSSArena *arena,
 | 
| -  CK_RV *pError
 | 
| -)
 | 
| -{
 | 
| -  NSSCKFWMutex *mutex;
 | 
| -  
 | 
| -  mutex = nss_ZNEW(arena, NSSCKFWMutex);
 | 
| -  if (!mutex) {
 | 
| -    *pError = CKR_HOST_MEMORY;
 | 
| -    return (NSSCKFWMutex *)NULL;
 | 
| -  }
 | 
| -  *pError = CKR_OK;
 | 
| -  mutex->lock = NULL;
 | 
| -  if (LockingState == MultiThreaded) {
 | 
| -    mutex->lock = PR_NewLock();
 | 
| -    if (!mutex->lock) {
 | 
| -      *pError = CKR_HOST_MEMORY; /* we couldn't get the resource */
 | 
| -    }
 | 
| -  }
 | 
| -    
 | 
| -  if( CKR_OK != *pError ) {
 | 
| -    (void)nss_ZFreeIf(mutex);
 | 
| -    return (NSSCKFWMutex *)NULL;
 | 
| -  }
 | 
| -
 | 
| -#ifdef DEBUG
 | 
| -  *pError = mutex_add_pointer(mutex);
 | 
| -  if( CKR_OK != *pError ) {
 | 
| -    if (mutex->lock) {
 | 
| -      PR_DestroyLock(mutex->lock);
 | 
| -    }
 | 
| -    (void)nss_ZFreeIf(mutex);
 | 
| -    return (NSSCKFWMutex *)NULL;
 | 
| -  }
 | 
| -#endif /* DEBUG */
 | 
| -
 | 
| -  return mutex;
 | 
| -}  
 | 
| -
 | 
| -/*
 | 
| - * nssCKFWMutex_Destroy
 | 
| - *
 | 
| - */
 | 
| -NSS_EXTERN CK_RV
 | 
| -nssCKFWMutex_Destroy
 | 
| -(
 | 
| -  NSSCKFWMutex *mutex
 | 
| -)
 | 
| -{
 | 
| -  CK_RV rv = CKR_OK;
 | 
| -
 | 
| -#ifdef NSSDEBUG
 | 
| -  rv = nssCKFWMutex_verifyPointer(mutex);
 | 
| -  if( CKR_OK != rv ) {
 | 
| -    return rv;
 | 
| -  }
 | 
| -#endif /* NSSDEBUG */
 | 
| - 
 | 
| -  if (mutex->lock) {
 | 
| -    PR_DestroyLock(mutex->lock);
 | 
| -  } 
 | 
| -
 | 
| -#ifdef DEBUG
 | 
| -  (void)mutex_remove_pointer(mutex);
 | 
| -#endif /* DEBUG */
 | 
| -
 | 
| -  (void)nss_ZFreeIf(mutex);
 | 
| -  return rv;
 | 
| -}
 | 
| -
 | 
| -/*
 | 
| - * nssCKFWMutex_Lock
 | 
| - *
 | 
| - */
 | 
| -NSS_EXTERN CK_RV
 | 
| -nssCKFWMutex_Lock
 | 
| -(
 | 
| -  NSSCKFWMutex *mutex
 | 
| -)
 | 
| -{
 | 
| -#ifdef NSSDEBUG
 | 
| -  CK_RV rv = nssCKFWMutex_verifyPointer(mutex);
 | 
| -  if( CKR_OK != rv ) {
 | 
| -    return rv;
 | 
| -  }
 | 
| -#endif /* NSSDEBUG */
 | 
| -  if (mutex->lock) {
 | 
| -    PR_Lock(mutex->lock);
 | 
| -  }
 | 
| -  
 | 
| -  return CKR_OK;
 | 
| -}
 | 
| -
 | 
| -/*
 | 
| - * nssCKFWMutex_Unlock
 | 
| - *
 | 
| - */
 | 
| -NSS_EXTERN CK_RV
 | 
| -nssCKFWMutex_Unlock
 | 
| -(
 | 
| -  NSSCKFWMutex *mutex
 | 
| -)
 | 
| -{
 | 
| -  PRStatus nrv;
 | 
| -#ifdef NSSDEBUG
 | 
| -  CK_RV rv = nssCKFWMutex_verifyPointer(mutex);
 | 
| -
 | 
| -  if( CKR_OK != rv ) {
 | 
| -    return rv;
 | 
| -  }
 | 
| -#endif /* NSSDEBUG */
 | 
| -
 | 
| -  if (!mutex->lock) 
 | 
| -    return CKR_OK;
 | 
| -
 | 
| -  nrv =  PR_Unlock(mutex->lock);
 | 
| -
 | 
| -  /* if unlock fails, either we have a programming error, or we have
 | 
| -   * some sort of hardware failure... in either case return CKR_DEVICE_ERROR.
 | 
| -   */
 | 
| -  return nrv == PR_SUCCESS ? CKR_OK : CKR_DEVICE_ERROR;
 | 
| -}
 | 
| -
 | 
| -/*
 | 
| - * NSSCKFWMutex_Destroy
 | 
| - *
 | 
| - */
 | 
| -NSS_EXTERN CK_RV
 | 
| -NSSCKFWMutex_Destroy
 | 
| -(
 | 
| -  NSSCKFWMutex *mutex
 | 
| -)
 | 
| -{
 | 
| -#ifdef DEBUG
 | 
| -  CK_RV rv = nssCKFWMutex_verifyPointer(mutex);
 | 
| -  if( CKR_OK != rv ) {
 | 
| -    return rv;
 | 
| -  }
 | 
| -#endif /* DEBUG */
 | 
| -  
 | 
| -  return nssCKFWMutex_Destroy(mutex);
 | 
| -}
 | 
| -
 | 
| -/*
 | 
| - * NSSCKFWMutex_Lock
 | 
| - *
 | 
| - */
 | 
| -NSS_EXTERN CK_RV
 | 
| -NSSCKFWMutex_Lock
 | 
| -(
 | 
| -  NSSCKFWMutex *mutex
 | 
| -)
 | 
| -{
 | 
| -#ifdef DEBUG
 | 
| -  CK_RV rv = nssCKFWMutex_verifyPointer(mutex);
 | 
| -  if( CKR_OK != rv ) {
 | 
| -    return rv;
 | 
| -  }
 | 
| -#endif /* DEBUG */
 | 
| -  
 | 
| -  return nssCKFWMutex_Lock(mutex);
 | 
| -}
 | 
| -
 | 
| -/*
 | 
| - * NSSCKFWMutex_Unlock
 | 
| - *
 | 
| - */
 | 
| -NSS_EXTERN CK_RV
 | 
| -NSSCKFWMutex_Unlock
 | 
| -(
 | 
| -  NSSCKFWMutex *mutex
 | 
| -)
 | 
| -{
 | 
| -#ifdef DEBUG
 | 
| -  CK_RV rv = nssCKFWMutex_verifyPointer(mutex);
 | 
| -  if( CKR_OK != rv ) {
 | 
| -    return rv;
 | 
| -  }
 | 
| -#endif /* DEBUG */
 | 
| -
 | 
| -  return nssCKFWMutex_Unlock(mutex);
 | 
| -}
 | 
| -
 | 
| 
 |