diff options
author | wtc%netscape.com <devnull@localhost> | 2000-06-28 00:01:49 +0000 |
---|---|---|
committer | wtc%netscape.com <devnull@localhost> | 2000-06-28 00:01:49 +0000 |
commit | faa8ed0a67483a20b7d15515047335ef818edf26 (patch) | |
tree | 8c4fda4e000ada0d0780faf0b425282c5da52cd1 | |
parent | f0c15f5c670483ccffb57ea56625806a2d015f71 (diff) | |
download | nspr-hg-faa8ed0a67483a20b7d15515047335ef818edf26.tar.gz |
Bugzilla bug #41832: set the error codes if pthread_cond_wait or
pthread_cond_timedwait fails.
-rw-r--r-- | pr/src/pthreads/ptsynch.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/pr/src/pthreads/ptsynch.c b/pr/src/pthreads/ptsynch.c index 00f05b57..d21b1c7d 100644 --- a/pr/src/pthreads/ptsynch.c +++ b/pr/src/pthreads/ptsynch.c @@ -256,7 +256,8 @@ static PRIntn pt_TimedWait( /* NSPR doesn't report timeouts */ #ifdef _PR_DCETHREADS - return (rv == -1 && errno == EAGAIN) ? 0 : rv; + if (rv == -1) return (errno == EAGAIN) ? 0 : errno; + else return rv; #else return (rv == ETIMEDOUT) ? 0 : rv; #endif @@ -384,7 +385,12 @@ PR_IMPLEMENT(PRStatus) PR_WaitCondVar(PRCondVar *cvar, PRIntervalTime timeout) PR_ASSERT(0 == cvar->lock->notified.length); thred->waiting = NULL; /* and now we're not */ 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: PR_SetError(PR_PENDING_INTERRUPT_ERROR, 0); @@ -1081,7 +1087,12 @@ PR_IMPLEMENT(PRStatus) PRP_NakedWait( rv = pthread_cond_wait(&cvar->cv, &ml->mutex); else 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 */ PR_IMPLEMENT(PRStatus) PRP_NakedNotify(PRCondVar *cvar) |