Index: nspr/pr/src/pthreads/ptsynch.c |
diff --git a/nspr/pr/src/pthreads/ptsynch.c b/nspr/pr/src/pthreads/ptsynch.c |
index 03c5720ea638e587295d05c305447968682554b4..8663a4c719770a92020719beffbb44edc6be36ed 100644 |
--- a/nspr/pr/src/pthreads/ptsynch.c |
+++ b/nspr/pr/src/pthreads/ptsynch.c |
@@ -322,13 +322,21 @@ PR_IMPLEMENT(PRCondVar*) PR_NewCondVar(PRLock *lock) |
PR_ASSERT(lock != NULL); |
if (cv != NULL) |
{ |
- int rv = _PT_PTHREAD_COND_INIT(cv->cv, _pt_cvar_attr); |
+ int rv = _PT_PTHREAD_COND_INIT(cv->cv, _pt_cvar_attr); |
PR_ASSERT(0 == rv); |
- cv->lock = lock; |
- cv->notify_pending = 0; |
+ if (0 == rv) |
+ { |
+ cv->lock = lock; |
+ cv->notify_pending = 0; |
#if defined(DEBUG) |
- pt_debug.cvars_created += 1; |
+ pt_debug.cvars_created += 1; |
#endif |
+ } |
+ else |
+ { |
+ PR_DELETE(cv); |
+ cv = NULL; |
+ } |
} |
return cv; |
} /* PR_NewCondVar */ |
@@ -337,10 +345,13 @@ PR_IMPLEMENT(void) PR_DestroyCondVar(PRCondVar *cvar) |
{ |
if (0 > PR_ATOMIC_DECREMENT(&cvar->notify_pending)) |
{ |
- PRIntn rv = pthread_cond_destroy(&cvar->cv); PR_ASSERT(0 == rv); |
+ PRIntn rv = pthread_cond_destroy(&cvar->cv); |
#if defined(DEBUG) |
+ PR_ASSERT(0 == rv); |
memset(cvar, 0xaf, sizeof(PRCondVar)); |
pt_debug.cvars_destroyed += 1; |
+#else |
+ (void)rv; |
#endif |
PR_Free(cvar); |
} |
@@ -1181,9 +1192,17 @@ PR_IMPLEMENT(PRCondVar*) PRP_NewNakedCondVar(void) |
if (cv != NULL) |
{ |
int rv; |
- rv = _PT_PTHREAD_COND_INIT(cv->cv, _pt_cvar_attr); |
+ rv = _PT_PTHREAD_COND_INIT(cv->cv, _pt_cvar_attr); |
PR_ASSERT(0 == rv); |
- cv->lock = _PR_NAKED_CV_LOCK; |
+ if (0 == rv) |
+ { |
+ cv->lock = _PR_NAKED_CV_LOCK; |
+ } |
+ else |
+ { |
+ PR_DELETE(cv); |
+ cv = NULL; |
+ } |
} |
return cv; |
} /* PRP_NewNakedCondVar */ |