Index: nss/mozilla/nsprpub/pr/src/pthreads/ptsynch.c |
=================================================================== |
--- nss/mozilla/nsprpub/pr/src/pthreads/ptsynch.c (revision 55475) |
+++ nss/mozilla/nsprpub/pr/src/pthreads/ptsynch.c (working copy) |
@@ -148,13 +148,13 @@ |
} |
#if defined(DEBUG) |
pt_debug.cvars_notified += 1; |
- if (0 > PR_AtomicDecrement(&cv->notify_pending)) |
+ if (0 > PR_ATOMIC_DECREMENT(&cv->notify_pending)) |
{ |
pt_debug.delayed_cv_deletes += 1; |
PR_DestroyCondVar(cv); |
} |
#else /* defined(DEBUG) */ |
- if (0 > PR_AtomicDecrement(&cv->notify_pending)) |
+ if (0 > PR_ATOMIC_DECREMENT(&cv->notify_pending)) |
PR_DestroyCondVar(cv); |
#endif /* defined(DEBUG) */ |
} |
@@ -196,7 +196,7 @@ |
memset(lock, 0xaf, sizeof(PRLock)); |
pt_debug.locks_destroyed += 1; |
#endif |
- PR_DELETE(lock); |
+ PR_Free(lock); |
} /* PR_DestroyLock */ |
PR_IMPLEMENT(void) PR_Lock(PRLock *lock) |
@@ -338,7 +338,7 @@ |
} |
/* A brand new entry in the array */ |
- (void)PR_AtomicIncrement(&cvar->notify_pending); |
+ (void)PR_ATOMIC_INCREMENT(&cvar->notify_pending); |
notified->cv[index].times = (broadcast) ? -1 : 1; |
notified->cv[index].cv = cvar; |
notified->length += 1; |
@@ -367,14 +367,14 @@ |
PR_IMPLEMENT(void) PR_DestroyCondVar(PRCondVar *cvar) |
{ |
- if (0 > PR_AtomicDecrement(&cvar->notify_pending)) |
+ if (0 > PR_ATOMIC_DECREMENT(&cvar->notify_pending)) |
{ |
PRIntn rv = pthread_cond_destroy(&cvar->cv); PR_ASSERT(0 == rv); |
#if defined(DEBUG) |
memset(cvar, 0xaf, sizeof(PRCondVar)); |
pt_debug.cvars_destroyed += 1; |
#endif |
- PR_DELETE(cvar); |
+ PR_Free(cvar); |
} |
} /* PR_DestroyCondVar */ |
@@ -463,6 +463,7 @@ |
{ |
PRMonitor *mon; |
PRCondVar *cvar; |
+ int rv; |
if (!_pr_initialized) _PR_ImplicitInitialization(); |
@@ -473,25 +474,37 @@ |
return NULL; |
} |
mon = PR_NEWZAP(PRMonitor); |
- if (mon != NULL) |
+ if (mon == NULL) |
{ |
- int rv; |
- rv = _PT_PTHREAD_MUTEX_INIT(mon->lock.mutex, _pt_mattr); |
- PR_ASSERT(0 == rv); |
+ PR_Free(cvar); |
+ PR_SetError(PR_OUT_OF_MEMORY_ERROR, 0); |
+ return NULL; |
+ } |
- _PT_PTHREAD_INVALIDATE_THR_HANDLE(mon->owner); |
+ rv = _PT_PTHREAD_MUTEX_INIT(mon->lock.mutex, _pt_mattr); |
+ PR_ASSERT(0 == rv); |
+ if (0 != rv) |
+ { |
+ PR_Free(mon); |
+ PR_Free(cvar); |
+ PR_SetError(PR_OPERATION_NOT_SUPPORTED_ERROR, 0); |
+ return NULL; |
+ } |
- mon->cvar = cvar; |
- rv = _PT_PTHREAD_COND_INIT(mon->cvar->cv, _pt_cvar_attr); |
- PR_ASSERT(0 == rv); |
- mon->entryCount = 0; |
- mon->cvar->lock = &mon->lock; |
- if (0 != rv) |
- { |
- PR_DELETE(mon); |
- PR_DELETE(cvar); |
- mon = NULL; |
- } |
+ _PT_PTHREAD_INVALIDATE_THR_HANDLE(mon->owner); |
+ |
+ mon->cvar = cvar; |
+ rv = _PT_PTHREAD_COND_INIT(mon->cvar->cv, _pt_cvar_attr); |
+ PR_ASSERT(0 == rv); |
+ mon->entryCount = 0; |
+ mon->cvar->lock = &mon->lock; |
+ if (0 != rv) |
+ { |
+ pthread_mutex_destroy(&mon->lock.mutex); |
+ PR_Free(mon); |
+ PR_Free(cvar); |
+ PR_SetError(PR_OPERATION_NOT_SUPPORTED_ERROR, 0); |
+ return NULL; |
} |
return mon; |
} /* PR_NewMonitor */ |
@@ -513,7 +526,7 @@ |
#if defined(DEBUG) |
memset(mon, 0xaf, sizeof(PRMonitor)); |
#endif |
- PR_DELETE(mon); |
+ PR_Free(mon); |
} /* PR_DestroyMonitor */ |
@@ -674,7 +687,7 @@ |
"PR_DestroySem", "locks & condition variables"); |
PR_DestroyLock(semaphore->cvar->lock); |
PR_DestroyCondVar(semaphore->cvar); |
- PR_DELETE(semaphore); |
+ PR_Free(semaphore); |
} /* PR_DestroySem */ |
PR_IMPLEMENT(PRSemaphore*) PR_NewSem(PRUintn value) |
@@ -700,7 +713,7 @@ |
} |
PR_DestroyLock(lock); |
} |
- PR_DELETE(semaphore); |
+ PR_Free(semaphore); |
} |
return NULL; |
} |
@@ -757,7 +770,7 @@ |
if ((sem_t *) -1 == sem->sem) |
{ |
_PR_MD_MAP_DEFAULT_ERROR(errno); |
- PR_DELETE(sem); |
+ PR_Free(sem); |
return NULL; |
} |
return sem; |
@@ -796,7 +809,7 @@ |
_PR_MD_MAP_DEFAULT_ERROR(errno); |
return PR_FAILURE; |
} |
- PR_DELETE(sem); |
+ PR_Free(sem); |
return PR_SUCCESS; |
} |
@@ -907,7 +920,7 @@ |
if (semctl(sem->semid, 0, SETVAL, arg) == -1) |
{ |
_PR_MD_MAP_DEFAULT_ERROR(errno); |
- PR_DELETE(sem); |
+ PR_Free(sem); |
return NULL; |
} |
/* call semop to set sem_otime to nonzero */ |
@@ -917,7 +930,7 @@ |
if (semop(sem->semid, &sop, 1) == -1) |
{ |
_PR_MD_MAP_DEFAULT_ERROR(errno); |
- PR_DELETE(sem); |
+ PR_Free(sem); |
return NULL; |
} |
return sem; |
@@ -926,7 +939,7 @@ |
if (errno != EEXIST || flags & PR_SEM_EXCL) |
{ |
_PR_MD_MAP_DEFAULT_ERROR(errno); |
- PR_DELETE(sem); |
+ PR_Free(sem); |
return NULL; |
} |
} |
@@ -935,7 +948,7 @@ |
if (sem->semid == -1) |
{ |
_PR_MD_MAP_DEFAULT_ERROR(errno); |
- PR_DELETE(sem); |
+ PR_Free(sem); |
return NULL; |
} |
for (i = 0; i < MAX_TRIES; i++) |
@@ -948,7 +961,7 @@ |
if (i == MAX_TRIES) |
{ |
PR_SetError(PR_IO_TIMEOUT_ERROR, 0); |
- PR_DELETE(sem); |
+ PR_Free(sem); |
return NULL; |
} |
return sem; |
@@ -986,7 +999,7 @@ |
PR_IMPLEMENT(PRStatus) PR_CloseSemaphore(PRSem *sem) |
{ |
- PR_DELETE(sem); |
+ PR_Free(sem); |
return PR_SUCCESS; |
} |
@@ -1112,7 +1125,7 @@ |
#if defined(DEBUG) |
memset(cvar, 0xaf, sizeof(PRCondVar)); |
#endif |
- PR_DELETE(cvar); |
+ PR_Free(cvar); |
} /* PRP_DestroyNakedCondVar */ |
PR_IMPLEMENT(PRStatus) PRP_NakedWait( |