コード例 #1
0
ファイル: prulock.c プロジェクト: venkatarajasekhar/Qt
PR_IMPLEMENT(PRLock*) PR_NewLock(void)
{
    PRLock *lock;

    if (!_pr_initialized) _PR_ImplicitInitialization();

    lock = PR_NEWZAP(PRLock);
    if (lock) {
        if (_PR_InitLock(lock) != PR_SUCCESS) {
            PR_DELETE(lock);
            return NULL;
        }
    }
    return lock;
}
コード例 #2
0
ファイル: prmon.c プロジェクト: Akesure/jxcore
/*
** Create a new monitor.
*/
PR_IMPLEMENT(PRMonitor*) PR_NewMonitor()
{
    PRMonitor *mon;
    PRStatus rv;

    if (!_pr_initialized) _PR_ImplicitInitialization();

    mon = PR_NEWZAP(PRMonitor);
    if (mon == NULL) {
        PR_SetError(PR_OUT_OF_MEMORY_ERROR, 0);
        return NULL;
    }

    rv = _PR_InitLock(&mon->lock);
    PR_ASSERT(rv == PR_SUCCESS);
    if (rv != PR_SUCCESS)
        goto error1;

    mon->owner = NULL;

    rv = _PR_InitCondVar(&mon->entryCV, &mon->lock);
    PR_ASSERT(rv == PR_SUCCESS);
    if (rv != PR_SUCCESS)
        goto error2;

    rv = _PR_InitCondVar(&mon->waitCV, &mon->lock);
    PR_ASSERT(rv == PR_SUCCESS);
    if (rv != PR_SUCCESS)
        goto error3;

    mon->notifyTimes = 0;
    mon->entryCount = 0;
    mon->name = NULL;
    return mon;

error3:
    _PR_FreeCondVar(&mon->entryCV);
error2:
    _PR_FreeLock(&mon->lock);
error1:
    PR_Free(mon);
    return NULL;
}