diff options
author | aaron <aaron@13f79535-47bb-0310-9956-ffa450edef68> | 2001-10-12 01:05:03 +0000 |
---|---|---|
committer | aaron <aaron@13f79535-47bb-0310-9956-ffa450edef68> | 2001-10-12 01:05:03 +0000 |
commit | 28b14d8e765a69bf0f1d60bb61b53f4536fada88 (patch) | |
tree | 57dae238d62ffcbbaaa03fa956290e884bff7648 /locks | |
parent | 7312e1d78d71b5d2be69214f6e7581ae8815705e (diff) | |
download | libapr-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')
-rw-r--r-- | locks/beos/thread_cond.c | 6 | ||||
-rw-r--r-- | locks/netware/thread_cond.c | 6 | ||||
-rw-r--r-- | locks/os2/thread_cond.c | 6 | ||||
-rw-r--r-- | locks/unix/thread_cond.c | 25 | ||||
-rw-r--r-- | locks/win32/thread_cond.c | 6 |
5 files changed, 49 insertions, 0 deletions
diff --git a/locks/beos/thread_cond.c b/locks/beos/thread_cond.c index 0d1de6cd7..30a4a25c4 100644 --- a/locks/beos/thread_cond.c +++ b/locks/beos/thread_cond.c @@ -74,6 +74,12 @@ APR_DECLARE(apr_status_t) apr_thread_cond_wait(apr_thread_cond_t *cond, return APR_ENOTIMPL; } +APR_DECLARE(apr_status_t) apr_thread_cond_timedwait(apr_thread_cond_t *cond, + apr_thread_mutex_t *mutex, + apr_interval_time_t timeout){ + return APR_ENOTIMPL; +} + APR_DECLARE(apr_status_t) apr_thread_cond_signal(apr_thread_cond_t *cond) { return APR_ENOTIMPL; diff --git a/locks/netware/thread_cond.c b/locks/netware/thread_cond.c index a57935bea..d5562311e 100644 --- a/locks/netware/thread_cond.c +++ b/locks/netware/thread_cond.c @@ -100,6 +100,12 @@ APR_DECLARE(apr_status_t) apr_thread_cond_wait(apr_thread_cond_t *cond, return APR_SUCCESS; } +APR_DECLARE(apr_status_t) apr_thread_cond_timedwait(apr_thread_cond_t *cond, + apr_thread_mutex_t *mutex, + apr_interval_time_t timeout){ + return APR_ENOTIMPL; +} + APR_DECLARE(apr_status_t) apr_thread_cond_signal(apr_thread_cond_t *cond) { NXCondSignal(cond->cond); diff --git a/locks/os2/thread_cond.c b/locks/os2/thread_cond.c index 94d91e941..308005646 100644 --- a/locks/os2/thread_cond.c +++ b/locks/os2/thread_cond.c @@ -73,6 +73,12 @@ APR_DECLARE(apr_status_t) apr_thread_cond_wait(apr_thread_cond_t *cond, return APR_ENOTIMPL; } +APR_DECLARE(apr_status_t) apr_thread_cond_timedwait(apr_thread_cond_t *cond, + apr_thread_mutex_t *mutex, + apr_interval_time_t timeout){ + return APR_ENOTIMPL; +} + APR_DECLARE(apr_status_t) apr_thread_cond_signal(apr_thread_cond_t *cond) { return APR_ENOTIMPL; 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; diff --git a/locks/win32/thread_cond.c b/locks/win32/thread_cond.c index 032c28da0..3fa0eeead 100644 --- a/locks/win32/thread_cond.c +++ b/locks/win32/thread_cond.c @@ -113,6 +113,12 @@ APR_DECLARE(apr_status_t) apr_thread_cond_wait(apr_thread_cond_t *cond, return APR_SUCCESS; } +APR_DECLARE(apr_status_t) apr_thread_cond_timedwait(apr_thread_cond_t *cond, + apr_thread_mutex_t *mutex, + apr_interval_time_t timeout){ + return APR_ENOTIMPL; +} + APR_DECLARE(apr_status_t) apr_thread_cond_signal(apr_thread_cond_t *cond) { DWORD rv; |