зеркало из https://github.com/mozilla/pjs.git
Bugzilla bug #41832: set the error codes if pthread_cond_wait or
pthread_cond_timedwait fails.
This commit is contained in:
Родитель
f549c74c60
Коммит
b7e004a2b7
|
@ -256,7 +256,8 @@ static PRIntn pt_TimedWait(
|
||||||
|
|
||||||
/* NSPR doesn't report timeouts */
|
/* NSPR doesn't report timeouts */
|
||||||
#ifdef _PR_DCETHREADS
|
#ifdef _PR_DCETHREADS
|
||||||
return (rv == -1 && errno == EAGAIN) ? 0 : rv;
|
if (rv == -1) return (errno == EAGAIN) ? 0 : errno;
|
||||||
|
else return rv;
|
||||||
#else
|
#else
|
||||||
return (rv == ETIMEDOUT) ? 0 : rv;
|
return (rv == ETIMEDOUT) ? 0 : rv;
|
||||||
#endif
|
#endif
|
||||||
|
@ -384,7 +385,12 @@ PR_IMPLEMENT(PRStatus) PR_WaitCondVar(PRCondVar *cvar, PRIntervalTime timeout)
|
||||||
PR_ASSERT(0 == cvar->lock->notified.length);
|
PR_ASSERT(0 == cvar->lock->notified.length);
|
||||||
thred->waiting = NULL; /* and now we're not */
|
thred->waiting = NULL; /* and now we're not */
|
||||||
if (_PT_THREAD_INTERRUPTED(thred)) goto aborted;
|
if (_PT_THREAD_INTERRUPTED(thred)) goto aborted;
|
||||||
return (rv == 0) ? PR_SUCCESS : PR_FAILURE;
|
if (rv != 0)
|
||||||
|
{
|
||||||
|
_PR_MD_MAP_DEFAULT_ERROR(rv);
|
||||||
|
return PR_FAILURE;
|
||||||
|
}
|
||||||
|
return PR_SUCCESS;
|
||||||
|
|
||||||
aborted:
|
aborted:
|
||||||
PR_SetError(PR_PENDING_INTERRUPT_ERROR, 0);
|
PR_SetError(PR_PENDING_INTERRUPT_ERROR, 0);
|
||||||
|
@ -1081,7 +1087,12 @@ PR_IMPLEMENT(PRStatus) PRP_NakedWait(
|
||||||
rv = pthread_cond_wait(&cvar->cv, &ml->mutex);
|
rv = pthread_cond_wait(&cvar->cv, &ml->mutex);
|
||||||
else
|
else
|
||||||
rv = pt_TimedWait(&cvar->cv, &ml->mutex, timeout);
|
rv = pt_TimedWait(&cvar->cv, &ml->mutex, timeout);
|
||||||
return (rv == 0) ? PR_SUCCESS : PR_FAILURE;
|
if (rv != 0)
|
||||||
|
{
|
||||||
|
_PR_MD_MAP_DEFAULT_ERROR(rv);
|
||||||
|
return PR_FAILURE;
|
||||||
|
}
|
||||||
|
return PR_SUCCESS;
|
||||||
} /* PRP_NakedWait */
|
} /* PRP_NakedWait */
|
||||||
|
|
||||||
PR_IMPLEMENT(PRStatus) PRP_NakedNotify(PRCondVar *cvar)
|
PR_IMPLEMENT(PRStatus) PRP_NakedNotify(PRCondVar *cvar)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче