summaryrefslogtreecommitdiff
path: root/locks/unix/thread_cond.c
diff options
context:
space:
mode:
authoraaron <aaron@13f79535-47bb-0310-9956-ffa450edef68>2001-10-12 01:05:03 +0000
committeraaron <aaron@13f79535-47bb-0310-9956-ffa450edef68>2001-10-12 01:05:03 +0000
commit28b14d8e765a69bf0f1d60bb61b53f4536fada88 (patch)
tree57dae238d62ffcbbaaa03fa956290e884bff7648 /locks/unix/thread_cond.c
parent7312e1d78d71b5d2be69214f6e7581ae8815705e (diff)
downloadlibapr-28b14d8e765a69bf0f1d60bb61b53f4536fada88.tar.gz
Adds apr_thread_cond_timedwait() interface to new lock API.
Implements it for UNIX, stubs elsewhere. git-svn-id: http://svn.apache.org/repos/asf/apr/apr/trunk@62419 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'locks/unix/thread_cond.c')
-rw-r--r--locks/unix/thread_cond.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/locks/unix/thread_cond.c b/locks/unix/thread_cond.c
index 3c7ad6fa7..0a107569a 100644
--- a/locks/unix/thread_cond.c
+++ b/locks/unix/thread_cond.c
@@ -124,6 +124,31 @@ APR_DECLARE(apr_status_t) apr_thread_cond_wait(apr_thread_cond_t *cond,
return stat;
}
+APR_DECLARE(apr_status_t) apr_thread_cond_timedwait(apr_thread_cond_t *cond,
+ apr_thread_mutex_t *mutex,
+ apr_interval_time_t timeout)
+{
+ apr_status_t stat;
+ apr_time_t then;
+ struct timespec abstime;
+
+ then = apr_time_now() + timeout;
+ abstime.tv_sec = then / APR_USEC_PER_SEC;
+ abstime.tv_nsec = (then % APR_USEC_PER_SEC) * 1000; /* nanoseconds */
+
+ stat = pthread_cond_timedwait(cond->cond, &mutex->mutex, &abstime);
+#ifdef PTHREAD_SETS_ERRNO
+ if (stat) {
+ stat = errno;
+ }
+#endif
+ if (ETIMEDOUT == stat) {
+ return APR_TIMEUP;
+ }
+ return stat;
+}
+
+
APR_DECLARE(apr_status_t) apr_thread_cond_signal(apr_thread_cond_t *cond)
{
apr_status_t stat;