| Index: nspr/pr/src/threads/combined/prucv.c
|
| ===================================================================
|
| --- nspr/pr/src/threads/combined/prucv.c (revision 257452)
|
| +++ nspr/pr/src/threads/combined/prucv.c (working copy)
|
| @@ -446,31 +446,37 @@
|
| {
|
| PRCondVar *cvar;
|
|
|
| - PR_ASSERT(lock != NULL);
|
| -
|
| cvar = PR_NEWZAP(PRCondVar);
|
| if (cvar) {
|
| -#ifdef _PR_GLOBAL_THREADS_ONLY
|
| - if(_PR_MD_NEW_CV(&cvar->md)) {
|
| - PR_DELETE(cvar);
|
| - PR_SetError(PR_INSUFFICIENT_RESOURCES_ERROR, 0);
|
| - return NULL;
|
| - }
|
| -#endif
|
| - if (_PR_MD_NEW_LOCK(&(cvar->ilock)) == PR_FAILURE) {
|
| - PR_DELETE(cvar);
|
| - PR_SetError(PR_INSUFFICIENT_RESOURCES_ERROR, 0);
|
| - return NULL;
|
| - }
|
| - cvar->lock = lock;
|
| - PR_INIT_CLIST(&cvar->condQ);
|
| -
|
| + if (_PR_InitCondVar(cvar, lock) != PR_SUCCESS) {
|
| + PR_DELETE(cvar);
|
| + return NULL;
|
| + }
|
| } else {
|
| PR_SetError(PR_OUT_OF_MEMORY_ERROR, 0);
|
| }
|
| return cvar;
|
| }
|
|
|
| +PRStatus _PR_InitCondVar(PRCondVar *cvar, PRLock *lock)
|
| +{
|
| + PR_ASSERT(lock != NULL);
|
| +
|
| +#ifdef _PR_GLOBAL_THREADS_ONLY
|
| + if(_PR_MD_NEW_CV(&cvar->md)) {
|
| + PR_SetError(PR_INSUFFICIENT_RESOURCES_ERROR, 0);
|
| + return PR_FAILURE;
|
| + }
|
| +#endif
|
| + if (_PR_MD_NEW_LOCK(&(cvar->ilock)) != PR_SUCCESS) {
|
| + PR_SetError(PR_INSUFFICIENT_RESOURCES_ERROR, 0);
|
| + return PR_FAILURE;
|
| + }
|
| + cvar->lock = lock;
|
| + PR_INIT_CLIST(&cvar->condQ);
|
| + return PR_SUCCESS;
|
| +}
|
| +
|
| /*
|
| ** Destroy a condition variable. There must be no thread
|
| ** waiting on the condvar. The caller is responsible for guaranteeing
|
| @@ -479,14 +485,18 @@
|
| */
|
| PR_IMPLEMENT(void) PR_DestroyCondVar(PRCondVar *cvar)
|
| {
|
| + _PR_FreeCondVar(cvar);
|
| + PR_DELETE(cvar);
|
| +}
|
| +
|
| +void _PR_FreeCondVar(PRCondVar *cvar)
|
| +{
|
| PR_ASSERT(cvar->condQ.next == &cvar->condQ);
|
|
|
| #ifdef _PR_GLOBAL_THREADS_ONLY
|
| _PR_MD_FREE_CV(&cvar->md);
|
| #endif
|
| _PR_MD_FREE_LOCK(&(cvar->ilock));
|
| -
|
| - PR_DELETE(cvar);
|
| }
|
|
|
| /*
|
|
|