void _PR_CleanupMW(void) { PR_DestroyLock(mw_lock); mw_lock = NULL; if (mw_state->group) { PR_DestroyWaitGroup(mw_state->group); /* mw_state->group is set to NULL as a side effect. */ } PR_DELETE(mw_state); } /* _PR_CleanupMW */
static PRWaitGroup *MW_Init2(void) { PRWaitGroup *group = mw_state->group; /* it's the null group */ if (NULL == group) /* there is this special case */ { group = PR_CreateWaitGroup(_PR_DEFAULT_HASH_LENGTH); if (NULL == group) goto failed_alloc; PR_Lock(mw_lock); if (NULL == mw_state->group) { mw_state->group = group; group = NULL; } PR_Unlock(mw_lock); if (group != NULL) (void)PR_DestroyWaitGroup(group); group = mw_state->group; /* somebody beat us to it */ } failed_alloc: return group; /* whatever */ } /* MW_Init2 */