| Index: nss/lib/base/tracker.c
|
| diff --git a/nss/lib/base/tracker.c b/nss/lib/base/tracker.c
|
| index 06e2baf2a46c8151720a5e68fcf2a9d73ea821f3..850add7c4bb868c3c4ca5c93feaca6cc7e8ef460 100644
|
| --- a/nss/lib/base/tracker.c
|
| +++ b/nss/lib/base/tracker.c
|
| @@ -4,7 +4,7 @@
|
|
|
| /*
|
| * tracker.c
|
| - *
|
| + *
|
| * This file contains the code used by the pointer-tracking calls used
|
| * in the debug builds to catch bad pointers. The entire contents are
|
| * only available in debug builds (both internal and external builds).
|
| @@ -24,12 +24,9 @@
|
| */
|
|
|
| static PLHashNumber PR_CALLBACK
|
| -identity_hash
|
| -(
|
| - const void *key
|
| -)
|
| +identity_hash(const void *key)
|
| {
|
| - return (PLHashNumber)((char *)key - (char *)NULL);
|
| + return (PLHashNumber)((char *)key - (char *)NULL);
|
| }
|
|
|
| /*
|
| @@ -41,44 +38,38 @@ identity_hash
|
| */
|
|
|
| static PRStatus
|
| -trackerOnceFunc
|
| -(
|
| - void *arg
|
| -)
|
| +trackerOnceFunc(void *arg)
|
| {
|
| - nssPointerTracker *tracker = (nssPointerTracker *)arg;
|
| -
|
| - tracker->lock = PZ_NewLock(nssILockOther);
|
| - if( (PZLock *)NULL == tracker->lock ) {
|
| - return PR_FAILURE;
|
| - }
|
| -
|
| - tracker->table = PL_NewHashTable(0,
|
| - identity_hash,
|
| - PL_CompareValues,
|
| - PL_CompareValues,
|
| - (PLHashAllocOps *)NULL,
|
| - (void *)NULL);
|
| - if( (PLHashTable *)NULL == tracker->table ) {
|
| - PZ_DestroyLock(tracker->lock);
|
| - tracker->lock = (PZLock *)NULL;
|
| - return PR_FAILURE;
|
| - }
|
| -
|
| - return PR_SUCCESS;
|
| + nssPointerTracker *tracker = (nssPointerTracker *)arg;
|
| +
|
| + tracker->lock = PZ_NewLock(nssILockOther);
|
| + if ((PZLock *)NULL == tracker->lock) {
|
| + return PR_FAILURE;
|
| + }
|
| +
|
| + tracker->table =
|
| + PL_NewHashTable(0, identity_hash, PL_CompareValues, PL_CompareValues,
|
| + (PLHashAllocOps *)NULL, (void *)NULL);
|
| + if ((PLHashTable *)NULL == tracker->table) {
|
| + PZ_DestroyLock(tracker->lock);
|
| + tracker->lock = (PZLock *)NULL;
|
| + return PR_FAILURE;
|
| + }
|
| +
|
| + return PR_SUCCESS;
|
| }
|
|
|
| /*
|
| * nssPointerTracker_initialize
|
| *
|
| * This method is only present in debug builds.
|
| - *
|
| + *
|
| * This routine initializes an nssPointerTracker object. Note that
|
| * the object must have been declared *static* to guarantee that it
|
| * is in a zeroed state initially. This routine is idempotent, and
|
| - * may even be safely called by multiple threads simultaneously with
|
| - * the same argument. This routine returns a PRStatus value; if
|
| - * successful, it will return PR_SUCCESS. On failure it will set an
|
| + * may even be safely called by multiple threads simultaneously with
|
| + * the same argument. This routine returns a PRStatus value; if
|
| + * successful, it will return PR_SUCCESS. On failure it will set an
|
| * error on the error stack and return PR_FAILURE.
|
| *
|
| * The error may be one of the following values:
|
| @@ -90,17 +81,14 @@ trackerOnceFunc
|
| */
|
|
|
| NSS_IMPLEMENT PRStatus
|
| -nssPointerTracker_initialize
|
| -(
|
| - nssPointerTracker *tracker
|
| -)
|
| +nssPointerTracker_initialize(nssPointerTracker *tracker)
|
| {
|
| - PRStatus rv = PR_CallOnceWithArg(&tracker->once, trackerOnceFunc, tracker);
|
| - if( PR_SUCCESS != rv ) {
|
| - nss_SetError(NSS_ERROR_NO_MEMORY);
|
| - }
|
| + PRStatus rv = PR_CallOnceWithArg(&tracker->once, trackerOnceFunc, tracker);
|
| + if (PR_SUCCESS != rv) {
|
| + nss_SetError(NSS_ERROR_NO_MEMORY);
|
| + }
|
|
|
| - return rv;
|
| + return rv;
|
| }
|
|
|
| #ifdef DONT_DESTROY_EMPTY_TABLES
|
| @@ -114,14 +102,9 @@ nssPointerTracker_initialize
|
| */
|
|
|
| static PRIntn PR_CALLBACK
|
| -count_entries
|
| -(
|
| - PLHashEntry *he,
|
| - PRIntn index,
|
| - void *arg
|
| -)
|
| +count_entries(PLHashEntry *he, PRIntn index, void *arg)
|
| {
|
| - return HT_ENUMERATE_NEXT;
|
| + return HT_ENUMERATE_NEXT;
|
| }
|
| #endif /* DONT_DESTROY_EMPTY_TABLES */
|
|
|
| @@ -138,7 +121,7 @@ static const PRCallOnceType zero_once;
|
| * nssPointerTracker_finalize
|
| *
|
| * This method is only present in debug builds.
|
| - *
|
| + *
|
| * This routine returns the nssPointerTracker object to the pre-
|
| * initialized state, releasing all resources used by the object.
|
| * It will *NOT* destroy the objects being tracked by the pointer
|
| @@ -160,58 +143,54 @@ static const PRCallOnceType zero_once;
|
| */
|
|
|
| NSS_IMPLEMENT PRStatus
|
| -nssPointerTracker_finalize
|
| -(
|
| - nssPointerTracker *tracker
|
| -)
|
| +nssPointerTracker_finalize(nssPointerTracker *tracker)
|
| {
|
| - PZLock *lock;
|
| + PZLock *lock;
|
|
|
| - if( (nssPointerTracker *)NULL == tracker ) {
|
| - nss_SetError(NSS_ERROR_INVALID_POINTER);
|
| - return PR_FAILURE;
|
| - }
|
| + if ((nssPointerTracker *)NULL == tracker) {
|
| + nss_SetError(NSS_ERROR_INVALID_POINTER);
|
| + return PR_FAILURE;
|
| + }
|
|
|
| - if( (PZLock *)NULL == tracker->lock ) {
|
| - nss_SetError(NSS_ERROR_TRACKER_NOT_INITIALIZED);
|
| - return PR_FAILURE;
|
| - }
|
| + if ((PZLock *)NULL == tracker->lock) {
|
| + nss_SetError(NSS_ERROR_TRACKER_NOT_INITIALIZED);
|
| + return PR_FAILURE;
|
| + }
|
|
|
| - lock = tracker->lock;
|
| - PZ_Lock(lock);
|
| + lock = tracker->lock;
|
| + PZ_Lock(lock);
|
|
|
| - if( (PLHashTable *)NULL == tracker->table ) {
|
| - PZ_Unlock(lock);
|
| - nss_SetError(NSS_ERROR_TRACKER_NOT_INITIALIZED);
|
| - return PR_FAILURE;
|
| - }
|
| + if ((PLHashTable *)NULL == tracker->table) {
|
| + PZ_Unlock(lock);
|
| + nss_SetError(NSS_ERROR_TRACKER_NOT_INITIALIZED);
|
| + return PR_FAILURE;
|
| + }
|
|
|
| #ifdef DONT_DESTROY_EMPTY_TABLES
|
| - /*
|
| - * I changed my mind; I think we don't want this after all.
|
| - * Comments?
|
| - */
|
| - count = PL_HashTableEnumerateEntries(tracker->table,
|
| - count_entries,
|
| - (void *)NULL);
|
| -
|
| - if( 0 != count ) {
|
| - PZ_Unlock(lock);
|
| - nss_SetError(NSS_ERROR_TRACKER_NOT_EMPTY);
|
| - return PR_FAILURE;
|
| - }
|
| + /*
|
| + * I changed my mind; I think we don't want this after all.
|
| + * Comments?
|
| + */
|
| + count = PL_HashTableEnumerateEntries(tracker->table, count_entries,
|
| + (void *)NULL);
|
| +
|
| + if (0 != count) {
|
| + PZ_Unlock(lock);
|
| + nss_SetError(NSS_ERROR_TRACKER_NOT_EMPTY);
|
| + return PR_FAILURE;
|
| + }
|
| #endif /* DONT_DESTROY_EMPTY_TABLES */
|
|
|
| - PL_HashTableDestroy(tracker->table);
|
| - /* memset(tracker, 0, sizeof(nssPointerTracker)); */
|
| - tracker->once = zero_once;
|
| - tracker->lock = (PZLock *)NULL;
|
| - tracker->table = (PLHashTable *)NULL;
|
| + PL_HashTableDestroy(tracker->table);
|
| + /* memset(tracker, 0, sizeof(nssPointerTracker)); */
|
| + tracker->once = zero_once;
|
| + tracker->lock = (PZLock *)NULL;
|
| + tracker->table = (PLHashTable *)NULL;
|
|
|
| - PZ_Unlock(lock);
|
| - PZ_DestroyLock(lock);
|
| + PZ_Unlock(lock);
|
| + PZ_DestroyLock(lock);
|
|
|
| - return PR_SUCCESS;
|
| + return PR_SUCCESS;
|
| }
|
|
|
| /*
|
| @@ -238,63 +217,59 @@ nssPointerTracker_finalize
|
| */
|
|
|
| NSS_IMPLEMENT PRStatus
|
| -nssPointerTracker_add
|
| -(
|
| - nssPointerTracker *tracker,
|
| - const void *pointer
|
| -)
|
| +nssPointerTracker_add(nssPointerTracker *tracker, const void *pointer)
|
| {
|
| - void *check;
|
| - PLHashEntry *entry;
|
| + void *check;
|
| + PLHashEntry *entry;
|
|
|
| - if( (nssPointerTracker *)NULL == tracker ) {
|
| - nss_SetError(NSS_ERROR_INVALID_POINTER);
|
| - return PR_FAILURE;
|
| - }
|
| + if ((nssPointerTracker *)NULL == tracker) {
|
| + nss_SetError(NSS_ERROR_INVALID_POINTER);
|
| + return PR_FAILURE;
|
| + }
|
|
|
| - if( (PZLock *)NULL == tracker->lock ) {
|
| - nss_SetError(NSS_ERROR_TRACKER_NOT_INITIALIZED);
|
| - return PR_FAILURE;
|
| - }
|
| + if ((PZLock *)NULL == tracker->lock) {
|
| + nss_SetError(NSS_ERROR_TRACKER_NOT_INITIALIZED);
|
| + return PR_FAILURE;
|
| + }
|
|
|
| - PZ_Lock(tracker->lock);
|
| + PZ_Lock(tracker->lock);
|
|
|
| - if( (PLHashTable *)NULL == tracker->table ) {
|
| - PZ_Unlock(tracker->lock);
|
| - nss_SetError(NSS_ERROR_TRACKER_NOT_INITIALIZED);
|
| - return PR_FAILURE;
|
| - }
|
| + if ((PLHashTable *)NULL == tracker->table) {
|
| + PZ_Unlock(tracker->lock);
|
| + nss_SetError(NSS_ERROR_TRACKER_NOT_INITIALIZED);
|
| + return PR_FAILURE;
|
| + }
|
|
|
| - check = PL_HashTableLookup(tracker->table, pointer);
|
| - if( (void *)NULL != check ) {
|
| - PZ_Unlock(tracker->lock);
|
| - nss_SetError(NSS_ERROR_DUPLICATE_POINTER);
|
| - return PR_FAILURE;
|
| - }
|
| + check = PL_HashTableLookup(tracker->table, pointer);
|
| + if ((void *)NULL != check) {
|
| + PZ_Unlock(tracker->lock);
|
| + nss_SetError(NSS_ERROR_DUPLICATE_POINTER);
|
| + return PR_FAILURE;
|
| + }
|
|
|
| - entry = PL_HashTableAdd(tracker->table, pointer, (void *)pointer);
|
| + entry = PL_HashTableAdd(tracker->table, pointer, (void *)pointer);
|
|
|
| - PZ_Unlock(tracker->lock);
|
| + PZ_Unlock(tracker->lock);
|
|
|
| - if( (PLHashEntry *)NULL == entry ) {
|
| - nss_SetError(NSS_ERROR_NO_MEMORY);
|
| - return PR_FAILURE;
|
| - }
|
| + if ((PLHashEntry *)NULL == entry) {
|
| + nss_SetError(NSS_ERROR_NO_MEMORY);
|
| + return PR_FAILURE;
|
| + }
|
|
|
| - return PR_SUCCESS;
|
| + return PR_SUCCESS;
|
| }
|
| -
|
| +
|
| /*
|
| * nssPointerTracker_remove
|
| *
|
| * This method is only present in debug builds.
|
| *
|
| - * This routine removes the specified pointer from the
|
| + * This routine removes the specified pointer from the
|
| * nssPointerTracker object. It does not call any destructor for the
|
| * object; rather, this should be called from the object's destructor.
|
| - * The nssPointerTracker is threadsafe, but this call is not
|
| - * idempotent. This routine returns a PRStatus value; if successful
|
| - * it will return PR_SUCCESS. On failure it will set an error on the
|
| + * The nssPointerTracker is threadsafe, but this call is not
|
| + * idempotent. This routine returns a PRStatus value; if successful
|
| + * it will return PR_SUCCESS. On failure it will set an error on the
|
| * error stack and return PR_FAILURE.
|
| *
|
| * The error may be one of the following values:
|
| @@ -308,41 +283,37 @@ nssPointerTracker_add
|
| */
|
|
|
| NSS_IMPLEMENT PRStatus
|
| -nssPointerTracker_remove
|
| -(
|
| - nssPointerTracker *tracker,
|
| - const void *pointer
|
| -)
|
| +nssPointerTracker_remove(nssPointerTracker *tracker, const void *pointer)
|
| {
|
| - PRBool registered;
|
| + PRBool registered;
|
|
|
| - if( (nssPointerTracker *)NULL == tracker ) {
|
| - nss_SetError(NSS_ERROR_INVALID_POINTER);
|
| - return PR_FAILURE;
|
| - }
|
| + if ((nssPointerTracker *)NULL == tracker) {
|
| + nss_SetError(NSS_ERROR_INVALID_POINTER);
|
| + return PR_FAILURE;
|
| + }
|
|
|
| - if( (PZLock *)NULL == tracker->lock ) {
|
| - nss_SetError(NSS_ERROR_TRACKER_NOT_INITIALIZED);
|
| - return PR_FAILURE;
|
| - }
|
| + if ((PZLock *)NULL == tracker->lock) {
|
| + nss_SetError(NSS_ERROR_TRACKER_NOT_INITIALIZED);
|
| + return PR_FAILURE;
|
| + }
|
|
|
| - PZ_Lock(tracker->lock);
|
| + PZ_Lock(tracker->lock);
|
|
|
| - if( (PLHashTable *)NULL == tracker->table ) {
|
| - PZ_Unlock(tracker->lock);
|
| - nss_SetError(NSS_ERROR_TRACKER_NOT_INITIALIZED);
|
| - return PR_FAILURE;
|
| - }
|
| + if ((PLHashTable *)NULL == tracker->table) {
|
| + PZ_Unlock(tracker->lock);
|
| + nss_SetError(NSS_ERROR_TRACKER_NOT_INITIALIZED);
|
| + return PR_FAILURE;
|
| + }
|
|
|
| - registered = PL_HashTableRemove(tracker->table, pointer);
|
| - PZ_Unlock(tracker->lock);
|
| + registered = PL_HashTableRemove(tracker->table, pointer);
|
| + PZ_Unlock(tracker->lock);
|
|
|
| - if( !registered ) {
|
| - nss_SetError(NSS_ERROR_POINTER_NOT_REGISTERED);
|
| - return PR_FAILURE;
|
| - }
|
| + if (!registered) {
|
| + nss_SetError(NSS_ERROR_POINTER_NOT_REGISTERED);
|
| + return PR_FAILURE;
|
| + }
|
|
|
| - return PR_SUCCESS;
|
| + return PR_SUCCESS;
|
| }
|
|
|
| /*
|
| @@ -354,10 +325,10 @@ nssPointerTracker_remove
|
| * with the nssPointerTracker object. The nssPointerTracker object is
|
| * threadsafe, and this call may be safely called from multiple threads
|
| * simultaneously with the same arguments. This routine returns a
|
| - * PRStatus value; if the pointer is registered this will return
|
| - * PR_SUCCESS. Otherwise it will set an error on the error stack and
|
| - * return PR_FAILURE. Although the error is suitable for leaving on
|
| - * the stack, callers may wish to augment the information available by
|
| + * PRStatus value; if the pointer is registered this will return
|
| + * PR_SUCCESS. Otherwise it will set an error on the error stack and
|
| + * return PR_FAILURE. Although the error is suitable for leaving on
|
| + * the stack, callers may wish to augment the information available by
|
| * placing a more type-specific error on the stack.
|
| *
|
| * The error may be one of the following values:
|
| @@ -371,41 +342,37 @@ nssPointerTracker_remove
|
| */
|
|
|
| NSS_IMPLEMENT PRStatus
|
| -nssPointerTracker_verify
|
| -(
|
| - nssPointerTracker *tracker,
|
| - const void *pointer
|
| -)
|
| +nssPointerTracker_verify(nssPointerTracker *tracker, const void *pointer)
|
| {
|
| - void *check;
|
| + void *check;
|
|
|
| - if( (nssPointerTracker *)NULL == tracker ) {
|
| - nss_SetError(NSS_ERROR_INVALID_POINTER);
|
| - return PR_FAILURE;
|
| - }
|
| + if ((nssPointerTracker *)NULL == tracker) {
|
| + nss_SetError(NSS_ERROR_INVALID_POINTER);
|
| + return PR_FAILURE;
|
| + }
|
|
|
| - if( (PZLock *)NULL == tracker->lock ) {
|
| - nss_SetError(NSS_ERROR_TRACKER_NOT_INITIALIZED);
|
| - return PR_FAILURE;
|
| - }
|
| + if ((PZLock *)NULL == tracker->lock) {
|
| + nss_SetError(NSS_ERROR_TRACKER_NOT_INITIALIZED);
|
| + return PR_FAILURE;
|
| + }
|
|
|
| - PZ_Lock(tracker->lock);
|
| + PZ_Lock(tracker->lock);
|
|
|
| - if( (PLHashTable *)NULL == tracker->table ) {
|
| - PZ_Unlock(tracker->lock);
|
| - nss_SetError(NSS_ERROR_TRACKER_NOT_INITIALIZED);
|
| - return PR_FAILURE;
|
| - }
|
| + if ((PLHashTable *)NULL == tracker->table) {
|
| + PZ_Unlock(tracker->lock);
|
| + nss_SetError(NSS_ERROR_TRACKER_NOT_INITIALIZED);
|
| + return PR_FAILURE;
|
| + }
|
|
|
| - check = PL_HashTableLookup(tracker->table, pointer);
|
| - PZ_Unlock(tracker->lock);
|
| + check = PL_HashTableLookup(tracker->table, pointer);
|
| + PZ_Unlock(tracker->lock);
|
|
|
| - if( (void *)NULL == check ) {
|
| - nss_SetError(NSS_ERROR_POINTER_NOT_REGISTERED);
|
| - return PR_FAILURE;
|
| - }
|
| + if ((void *)NULL == check) {
|
| + nss_SetError(NSS_ERROR_POINTER_NOT_REGISTERED);
|
| + return PR_FAILURE;
|
| + }
|
|
|
| - return PR_SUCCESS;
|
| + return PR_SUCCESS;
|
| }
|
|
|
| #endif /* DEBUG */
|
|
|