summaryrefslogtreecommitdiff
path: root/locks/netware
diff options
context:
space:
mode:
Diffstat (limited to 'locks/netware')
-rw-r--r--locks/netware/thread_cond.c19
-rw-r--r--locks/netware/thread_mutex.c23
2 files changed, 29 insertions, 13 deletions
diff --git a/locks/netware/thread_cond.c b/locks/netware/thread_cond.c
index dcb21edc9..da1162bc2 100644
--- a/locks/netware/thread_cond.c
+++ b/locks/netware/thread_cond.c
@@ -66,10 +66,21 @@ APR_DECLARE(apr_status_t) apr_thread_cond_wait(apr_thread_cond_t *cond,
APR_DECLARE(apr_status_t) apr_thread_cond_timedwait(apr_thread_cond_t *cond,
apr_thread_mutex_t *mutex,
- apr_interval_time_t timeout){
- if (NXCondTimedWait(cond->cond, mutex->mutex,
- (timeout*1000)/NXGetSystemTick()) == NX_ETIMEDOUT) {
- return APR_TIMEUP;
+ apr_interval_time_t timeout)
+{
+ int rc;
+ if (timeout < 0) {
+ rc = NXCondWait(cond->cond, mutex->mutex);
+ }
+ else {
+ timeout = timeout * 1000 / XGetSystemTick();
+ rc = NXCondTimedWait(cond->cond, mutex->mutex, timeout);
+ if (rc == NX_ETIMEDOUT) {
+ return APR_TIMEUP;
+ }
+ }
+ if (rc != 0) {
+ return APR_EINTR;
}
return APR_SUCCESS;
}
diff --git a/locks/netware/thread_mutex.c b/locks/netware/thread_mutex.c
index a43215dce..a11ad8345 100644
--- a/locks/netware/thread_mutex.c
+++ b/locks/netware/thread_mutex.c
@@ -119,17 +119,22 @@ APR_DECLARE(apr_status_t) apr_thread_mutex_timedlock(apr_thread_mutex_t *mutex,
apr_status_t rv;
NXLock(mutex->mutex);
if (mutex->locked) {
- if (absolute) {
- apr_time_t now = apr_time_now();
- if (timeout > now) {
- timeout -= now;
- }
- else {
- timeout = 0;
+ mutex->num_waiters++;
+ if (timeout < 0) {
+ rv = apr_thread_cond_dwait(mutex->cond, mutex);
+ }
+ else {
+ if (absolute) {
+ apr_time_t now = apr_time_now();
+ if (timeout > now) {
+ timeout -= now;
+ }
+ else {
+ timeout = 0;
+ }
}
+ rv = apr_thread_cond_timedwait(mutex->cond, mutex, timeout);
}
- mutex->num_waiters++;
- rv = apr_thread_cond_timedwait(mutex->cond, mutex, timeout);
mutex->num_waiters--;
}
else {