summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwtc%netscape.com <devnull@localhost>2000-06-28 00:01:49 +0000
committerwtc%netscape.com <devnull@localhost>2000-06-28 00:01:49 +0000
commitfaa8ed0a67483a20b7d15515047335ef818edf26 (patch)
tree8c4fda4e000ada0d0780faf0b425282c5da52cd1
parentf0c15f5c670483ccffb57ea56625806a2d015f71 (diff)
downloadnspr-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.c17
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)